winsock socket的recv函数

时间:2013-07-31 06:50:37

标签: windows tcp telnet sockets

我有一个与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

非常感谢任何帮助或指示。

2 个答案:

答案 0 :(得分:2)

问:我怎样才能确保...... BUFLEN读了?

答:你读了一个循环,直到你得到你期望的所有字符。或者直到你出现超时或错误。

答案 1 :(得分:1)

您需要反复调用recv函数,直到收到所需的数据量。请注意,使用TCP套接字时,无法确定是否在单个接收呼叫中接收到所有数据。如果使用单个TCP Send()调用发送数据,则很可能在多个接收中接收它,因为TCP套接字是流套接字。

recv()函数返回接收到的字节数,因此您可以继续调用该函数,直到获得所有字节为止。