windows - 在 Windows 7/2008 R2 上有时不发送套接字消息

标签 windows windows-7 udp winsock

在 Windows 7 上向计算机发送两条 UDP 消息时,有时第一条消息似乎根本没有发送。有没有其他人遇到过这种情况?

下面的测试代码演示了我机器上的问题。当我运行测试程序并观察到 ​​10.10.42.22 的所有 UDP 流量时,我看到正在发送第二条 UDP 消息,但未发送第一条 UDP 消息。如果我立即再次运行该程序,则会发送两个 UDP 消息。

它不会每次都失败,但如果我在再次运行测试之前等待几分钟,它通常会发生。

#include <iostream>
#include <winsock2.h>

int main()
{
 WSADATA wsaData;
 WSAStartup( MAKEWORD(2,2), &wsaData );

 sockaddr_in addr;
 addr.sin_family = AF_INET;
 addr.sin_port = htons( 52383 );
 addr.sin_addr.s_addr = inet_addr( "10.10.42.22" );

 SOCKET s = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );

 if ( sendto( s, "TEST1", 5, 0, (SOCKADDR *) &addr, sizeof( addr ) ) != 5 )
  std::cout << "first message not sent" << std::endl;

 if ( sendto( s, "TEST2", 5, 0, (SOCKADDR *) &addr, sizeof( addr ) ) != 5 )
  std::cout << "second message not sent" << std::endl;

 closesocket( s );

 WSACleanup();
 return 0;
}

最佳答案

这里的问题和this post基本一样它与 RFC 1122 的第 2.3.2.2 节有关:

2.3.2.2 ARP Packet Queue

The link layer SHOULD save (rather than discard) at least one (the latest) packet of each set of packets destined to the same unresolved IP address, and transmit the saved packet when the address has been resolved.

看起来为每个 UDP 消息打开一个新套接字是一种解决方法。

关于windows - 在 Windows 7/2008 R2 上有时不发送套接字消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382275/

相关文章:

windows - 如何为未注册的文件扩展名显示 "open with"对话框?

c - 仅删除句子中的字母字符

c++ - 256x256的图标又麻烦了,或者如何通过IImageList获取TRUE图标大小

FFMPEG:在将 RTP 转换为 HLS 时提供的应用程序无效

java - 在 Java 中使用 JNA 关闭监视器无法按预期工作

windows - 查找 Active Directory 组的所有者

c - 全局变量在 C 内核 .rdata 部分中不起作用

delphi - 在WinXP和Win7下执行delphi代码的差异。为什么?

c - UDP C 套接字 : Multiple Sockets Sharing Single Port

java - 如何在java中反射(reflect)端口53上的UDP数据包?