socket TCP连接 为什么recv()一直在接收啊?

jay_lee_1982 jay_lee_1982 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我把孙鑫老师的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阻塞?还是什么原因呢?
...全文
评论 15
收藏 已收藏
分享
返回顶部
jay_lee_1982
网络编程 18,356 成员 64,161 内容