【发布时间】:2012-04-04 12:28:38
【问题描述】:
我使用 C++ 开发了客户端服务器程序,所以我想接收超过 500kb ,我的客户端消息以“!”终止,所以我想接收直到我的最后一个字节(!)接收, 这是我的代码,它不起作用。它有什么问题。
do
{
int num = recv(*csock, buf, bytesLeft,0);
if (num == 0)
{
break;
}
else if (num < 0 && errno != EINTR)
{
fprintf(stderr, "Exit %d\n", __LINE__);
exit(1);
}
else if (num > 0)
{
numRd += num;
buf += num;
bytesLeft -= num;
fprintf(stderr, "read %d bytes - remaining = %d\n", num, bytesLeft);
}
}
while (bytesLeft != 0);
fprintf(stderr, "read total of %d bytes\n", numRd);
【问题讨论】:
-
1) 不要在非 NUL 终止的缓冲区上使用 strcat() strlen()。 2) 不要混合 C 和 C++ 3) 诊断输出应该到 stderr,而不是 stdout,添加 \n 有时会有所帮助。 4) 谢谢。
-
您的套接字是阻塞还是非阻塞?默认情况下,所有套接字都是阻塞的,这意味着如果没有接收到数据,那么对
recv的调用将在等待更多数据到达时阻塞。 -
经验法则:阅读您使用的所有命令的手册。
-
那么问题是什么?你有什么问题?你得到什么输出?请编辑您的问题并提供更多详细信息。
标签: c++ sockets tcp client-server tcpsocket