我正在 Windows 中使用TCP IP套接字程序,其中我创建了一个客户端,用于将数据传输到服务器和服务器正在将消息回显给客户端(请注意服务器已经过验证,可以通过telnet应用程序正常运行)。
但是当我从客户端发送测试消息时,它会在服务器端收到,但是当我尝试读取客户端中的回显消息时使用recv()函数的一方我没有得到回显的消息,但是我在服务器方面输入的内容显示在客户端端接收recv( )功能
我通过此链接http://cs.baylor.edu/~donahoo/practical/CSockets/code/TCPEchoClientWS.c
关注了该计划有人有解决方案吗?
答案 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 */