UDP未连接套接字发送失败,直到接收到第一个数据报

乔恩

我在Windows 7中使用Winsock类CAsyncSocket创建UDP聊天程序。它只是打开一个未连接的UDP套接字,并允许将文本字符串发送到另一台同时运行聊天程序的计算机。我发现,当我的聊天程序在两台计算机上运行时,两台计算机都使用交叉网线连接了以太网NIC(因此没有其他网络流量),无论哪台计算机先尝试传输,直到从另一台计算机发送第一个数据报之后,该计算机都不会成功。在下面的屏幕截图中,计算机1尝试发送“测试”三次,而计算机2没有收到它。然后,计算机#2发送“你好”,它被#1接收。然后,计算机1再次发送“测试”,并且这次被接收。尽管“测试”的三个初始传输

1号电脑

车站1

2号电脑

第二站

在每台计算机成功发送完数据报之后,所有后续数据报都将毫无问题地发送和接收。如果仅在一侧关闭并重新打开[Reset Local Port]套接字,则每台计算机仍然可以成功发送和接收。如果我同时重置两台计算机,则在大多数情况下,第一个要发送的计算机会遇到相同的问题,但并非总是如此。有时即使在[重置本地端口]之后,发送和接收仍然可以正常工作。创建未连接套接字的调用是

 Create(i_LocalPort, SOCK_DGRAM, FD_READ, m_LocalSockAddrIn.AddrStr());

接着

CAsyncSocket::SendTo()

发送数据报。寻找有关此处发生情况的一些提示。

更新信息:使用Wireshark查看时,丢失的数据包确实与适当的源地址和目标地址一起发送,但目的地未收到它们。 数据报捕获

乔恩

该问题是由Windows防火墙引起的。我关闭了两台计算机上的防火墙,问题消失了。通常,Windows在阻止访问时会弹出对话框,但是其中一台计算机已禁用“ Windows防火墙阻止新程序时通知我”,因此没有对话框消息。它只是默默地丢弃了数据报。我希望发送消息后允许数据报通过的原因是它有一个例外,允许从程序已发送到的端口进行接收。因此,在发送到另一个端口之后,便可以从该端口进行接收。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

接受连接时创建多个套接字,但数据被视为由第一个连接的客户端发送

来自分类Dev

UDP 数据报只显示 Java 中的第一个字符

来自分类Dev

一个套接字在线程中发送/接收

来自分类Dev

C#-TcpClient刚收到第一个数据包

来自分类Dev

发送和接收套接字数据报

来自分类Dev

C ++客户端套接字仅接收消息的第一个字母

来自分类Dev

第一个套接字连接来自远程 IP 为 0.0.0.0,所有后续连接都正常

来自分类Dev

第一个数据包后,ICMP失败

来自分类Dev

如果第一个失败,我可以连接到第二个数据库主机吗?

来自分类Dev

从同一套接字发送和接收数据的简单UDP示例

来自分类Dev

我是否可以通过同一UDP套接字同时发送和接收数据

来自分类Dev

为什么我的TCP服务器代码仅在第一个数据包或仅在第一个连接上发送SYN / ACK?

来自分类Dev

扭曲的套接字连接未接收到数据

来自分类Dev

C#不允许发送或接收数据的请求,因为未连接套接字

来自分类Dev

不允许发送或接收数据的请求,因为套接字未连接C#

来自分类Dev

总和直到第一个“ /”

来自分类Dev

创建第一个数据管道

来自分类Dev

检测第一个数据绑定

来自分类Dev

如何使用Tcpclient从另一个类向所有连接的套接字连接发送数据

来自分类Dev

ZeroMQ:每个数据类型的套接字还是只有一个套接字?

来自分类Dev

EF 代码第一个数据库:两个数据库之一的同一用户登录失败,等效连接字符串

来自分类Dev

为什么在使用 select() “中断”第一个连接时使用第二个套接字连接到服务器?

来自分类Dev

(Winsock)UDP接收有效,但对于同一套接字发送失败

来自分类Dev

UDP发送和接收套接字行为

来自分类Dev

接收到第一个字节之前的等待时间很长

来自分类Dev

从rust中的通道迭代器获取第一个接收到的值

来自分类Dev

我可以在套接字接收缓冲区中丢失数据报吗?使用UDP时如何发生?

来自分类Dev

获取子字符串,直到第一个数字字符

来自分类Dev

提取子字符串,直到第一个数字

Related 相关文章

  1. 1

    接受连接时创建多个套接字,但数据被视为由第一个连接的客户端发送

  2. 2

    UDP 数据报只显示 Java 中的第一个字符

  3. 3

    一个套接字在线程中发送/接收

  4. 4

    C#-TcpClient刚收到第一个数据包

  5. 5

    发送和接收套接字数据报

  6. 6

    C ++客户端套接字仅接收消息的第一个字母

  7. 7

    第一个套接字连接来自远程 IP 为 0.0.0.0,所有后续连接都正常

  8. 8

    第一个数据包后,ICMP失败

  9. 9

    如果第一个失败,我可以连接到第二个数据库主机吗?

  10. 10

    从同一套接字发送和接收数据的简单UDP示例

  11. 11

    我是否可以通过同一UDP套接字同时发送和接收数据

  12. 12

    为什么我的TCP服务器代码仅在第一个数据包或仅在第一个连接上发送SYN / ACK?

  13. 13

    扭曲的套接字连接未接收到数据

  14. 14

    C#不允许发送或接收数据的请求,因为未连接套接字

  15. 15

    不允许发送或接收数据的请求,因为套接字未连接C#

  16. 16

    总和直到第一个“ /”

  17. 17

    创建第一个数据管道

  18. 18

    检测第一个数据绑定

  19. 19

    如何使用Tcpclient从另一个类向所有连接的套接字连接发送数据

  20. 20

    ZeroMQ:每个数据类型的套接字还是只有一个套接字?

  21. 21

    EF 代码第一个数据库:两个数据库之一的同一用户登录失败,等效连接字符串

  22. 22

    为什么在使用 select() “中断”第一个连接时使用第二个套接字连接到服务器?

  23. 23

    (Winsock)UDP接收有效,但对于同一套接字发送失败

  24. 24

    UDP发送和接收套接字行为

  25. 25

    接收到第一个字节之前的等待时间很长

  26. 26

    从rust中的通道迭代器获取第一个接收到的值

  27. 27

    我可以在套接字接收缓冲区中丢失数据报吗?使用UDP时如何发生?

  28. 28

    获取子字符串,直到第一个数字字符

  29. 29

    提取子字符串,直到第一个数字

热门标签

归档