怎么理解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都一样,服务器怎么区分?
[最优解释]
会分配一个新的端口来建立连接的socket
[其他解释]
客户端你没有绑定同一个端口啊,所以实际是系统自动分配的.
[其他解释]
"假如服务器与客户端都在本机上,那么同时打开几个客户端,服务器怎么判断是哪个客户端呢。
我很疑惑,客户端的ip+port都一样,服务器怎么区分? "
你可以在服务器接收连接后输出端口号看下,我试过了。虽然IP相同,但端口号会不一样的。
[其他解释]
返回一个新的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和端口号,没有指定客户端的端口号
[其他解释]
知道了 谢谢各位了