socket TCP连接 为什么recv()一直在接收啊?
我把孙鑫老师的TCP socket编程改了一下,不知道为什么,TCPServer端始终在接收字符串“This is lisi”,尽管TCPClient端只发送了一次,请高手指点,谢谢!!!
TCP Server 端源程序:
。。。。。。//加载套接字库(略)
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
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);
while(1)
{
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
//closesocket(sockConn); 这里被我改掉了,本来是没有注释掉,所以接收了一次就关闭了
}
TCP Client端源程序:
。。。。。。//加载套接字库(略):
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is lisi",strlen("This is lisi")+1,0);//这里只发送了一次,为什Server端一直在接收呢?
closesocket(sockClient);
WSACleanup();
是不是在Server端我没有用socket阻塞?还是什么原因呢?