我有一个与telnet客户端连接的服务器应用程序(即telnet localhost _port_num - 这里的端口号与服务器应用程序相关联),
我的应用程序正常运行,但事情是我使用recv如下:
#define BUFLEN 512
char buf[BUFLEN];
iResult = recv(sd, (char *)buf, BUFLEN, 0);
这里recv调用只要在连接的telnet终端上按下任何字符就会返回,并且大部分时间iResult是1
或某些时候2
,即使我不按下输入telnet客户端将包含单个字符的框架发送到服务器应用程序。
如何在BUFLEN读取后确保recv应该返回?
如果linux recv按预期工作,则获取块直到enter
。
非常感谢任何帮助或指示。
答案 0 :(得分:2)
答:你读了一个循环,直到你得到你期望的所有字符。或者直到你出现超时或错误。
答案 1 :(得分:1)
您需要反复调用recv函数,直到收到所需的数据量。请注意,使用TCP套接字时,无法确定是否在单个接收呼叫中接收到所有数据。如果使用单个TCP Send()调用发送数据,则很可能在多个接收中接收它,因为TCP套接字是流套接字。
recv()函数返回接收到的字节数,因此您可以继续调用该函数,直到获得所有字节为止。