首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

如何理解socket

2012-12-16 
怎么理解socket服务器:bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR))listen(sockSrv, 5)while(

怎么理解socket


服务器:
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));  
listen(sockSrv, 5);  
while(1) {  
        SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);  
        char sendBuf[100];  
        sprintf(sendBuf, "Welcome %s to http://www.sunxin.org ",  
                inet_ntoa(addrClient.sin_addr));  
        send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);  
        char recvBuf[100];  
        recv(sockConn, recvBuf, 100, 0);  
        printf("%s/n ", recvBuf);  
        closesocket(sockConn);  
    }  


客户端:
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); 
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));  

假如服务器与客户端都在本机上,那么同时打开几个客户端,服务器怎么判断是哪个客户端呢。
我很疑惑,客户端的ip+port都一样,服务器怎么区分?
[最优解释]
引用:
C/C++ code??1SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); sockConn的端口号是重新分配的吗?

会分配一个新的端口来建立连接的socket
[其他解释]
客户端你没有绑定同一个端口啊,所以实际是系统自动分配的.
[其他解释]
"假如服务器与客户端都在本机上,那么同时打开几个客户端,服务器怎么判断是哪个客户端呢。
我很疑惑,客户端的ip+port都一样,服务器怎么区分? "

你可以在服务器接收连接后输出端口号看下,我试过了。虽然IP相同,但端口号会不一样的。
[其他解释]
引用:
C/C++ code??



1

SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); sockConn的端口号是重新分配的吗?

返回一个新的socket~
[其他解释]
你可以试一下,多个客户端同时连接,只能是最后一个能和服务器进行完整通信
[其他解释]
SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); 
sockConn的端口号是重新分配的吗?
[其他解释]
引用:
客户端你没有绑定同一个端口啊,所以实际是系统自动分配的.
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);  
20.    SOCKADDR_IN addrSrv;  
21.    addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1 ");  
22.    addrSrv.sin_family = AF_INET;  
23.    addrSrv.sin_port = htons(6000);  
24.    connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));  
这是完整的客户端
------其他解决方案--------------------


客户端代码只是指定了服务器的ip和端口号,没有指定客户端的端口号
[其他解释]
知道了 谢谢各位了

热点排行