【发布时间】:2011-05-13 12:58:42
【问题描述】:
我有一个 C 应用程序,它每隔几秒就向 UDP 服务器发送数据。如果客户端在几分钟内失去了网络连接,然后又恢复了连接,它会将所有累积的数据发送到服务器,这可能导致该客户端同时进入服务器的一百个或更多请求。
如果在使用 UDP 传输过程中发生错误,是否有任何方法可以防止这些消息从客户端发送?来自 UDP 客户端的 connect 调用是否有助于确定客户端是否可以连接到服务器?还是只有使用 TCP 才能做到这一点?
int socketDescriptor;
struct sockaddr_in serverAddress;
if ((socketDescriptor = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
printf("Could not create socket. \n");
return;
}
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = inet_addr(server_ip);
serverAddress.sin_port = htons(server_port);
if (sendto(socketDescriptor, data, strlen(data), 0,
(struct sockaddr *)&serverAddress, sizeof(serverAddress)) < 0)
{
printf("Could not send data to the server. \n");
return;
}
close(socketDescriptor);
【问题讨论】:
-
当你说“客户端失去它的[原文如此] 网络连接”时,你的意思是有人拔掉了插头或类似的东西吗? AFAIK connect() 不会帮助你;这只是一种方便,因此您不必在每个 send() 调用中指定目标地址。使用 UDP,connect() 不会触发任何网络活动,因为 UDP 未连接且无需交换任何段。