套接字发送数据,但recv程序不能正常工作

时间:2012-03-12 17:21:17

标签: c++ linux sockets netcat

我创建了2个程序,一个用于发送,另一个用于恢复数据。 所以,

recv数据的部分是:

while ((recvMsgSize = sock->recv(echoBuffer, RCVBUFSIZE))>0) {
   write(fileno(stdout), echoBuffer, recvMsgSize);
}

如果我使用它来收集大型文件数据,它运行良好,少量数据不起作用。 我知道问题在于recv部分,因为如果我使用netcat来收集数据它运行良好,它会收集整个数据。 有没有其他方法可以接收数据?

谢谢

1 个答案:

答案 0 :(得分:1)

我猜你的套接字是阻塞的,而recv正在等待发送RCVBUFSIZE字节。您应该首先发送将要发送的文件的大小,然后计算您收到的数据量,并在您丢失的数据少于RCVBUFSIZE字节时仅请求剩余部分。