TCP IP recv()函数未从服务器接收回显消息

时间:2014-03-01 12:38:39

标签: winsock telnet tcpclient tcp-ip recv

我正在 Windows 中使用TCP IP套接字程序,其中我创建了一个客户端,用于将数据传输到服务器服务器正在将消息回显给客户端(请注意服务器已经过验证,可以通过telnet应用程序正常运行)。

但是当我从客户端发送测试消息时,它会在服务器端收到,但是当我尝试读取客户端中的回显消息时使用recv()函数的一方我没有得到回显的消息,但是我在服务器方面输入的内容显示在客户端端接收recv( )功能

我通过此链接http://cs.baylor.edu/~donahoo/practical/CSockets/code/TCPEchoClientWS.c

关注了该计划

有人有解决方案吗?

1 个答案:

答案 0 :(得分:1)

这一行错了:

if ((bytesRcvd = recv(sock, echoBuffer, RCVBUFSIZE - 1, 0)) <= 0)

套接字处于阻塞模式,并且上面的行试图在接近消息结束时读取太多数据,因此如果它没有收到预期的那么多,它将阻塞。

请改为尝试:

if ((bytesRcvd = recv(sock, echoBuffer, min(echoStringLen - totalBytesRcvd, RCVBUFSIZE), 0)) <= 0)

然后改变这个:

echoBuffer[bytesRcvd] = '\0';  /* Add \0 so printf knows where to stop */
printf("%s", echoBuffer);            /* Print the echo buffer */

相反:

/* Specify bytes read so printf knows where to stop */
printf("%*s", bytesRcvd, echoBuffer);      /* Print the echo buffer */