【发布时间】:2013-01-18 12:29:52
【问题描述】:
我想发送一个字节数组 X 次,直到达到缓冲区大小。我的客户端发送字节数组,直到缓冲区大小已满。但问题是数据包丢失,服务器只能收到缓冲区大小的 8/10。
客户:
while(writeSize < bufferSize)
{
bytes_sent += sendto(servSocket, package, sizeof(package), 0, (struct sockaddr *)&server, sizeof(server));
writeSize+= sizeof(package);
}
服务器:
while(packetSize < bufferSize)
{
bytes_recv += recvfrom(servSocket, package, sizeof(package), 0, (struct sockaddr*)&client, &size);
packetSize += sizeof(package);
printf("Bytes recieved: %d\n", bytes_recv);
}
我实在想不出解决这个问题的办法。当客户端已经发送了所有的包,而服务器出现包丢失时,while循环不会结束,有什么想法可以解决这个问题吗?
非常感谢
【问题讨论】:
-
TCP?它会解决这个问题。
-
erm,如果可靠的协议很重要,请使用 TCP。否则,您将不得不在应用程序级别(通过 UDP)实现某种形式的重传处理。前者比后者简单得多...
-
任务是实现一个 UDP 服务器/客户端,很抱歉没有在帖子中包含它。我已经完成了 TCP 服务器/客户端。
-
您确定丢包吗?您的服务器代码不太正确 - 在循环的每次迭代中,
packetSize应该增加bytes_recv。 -
您缺少对系统调用的错误检查。万一
recvfrom()或sendto()失败,你的字节计数就会搞砸。