【奇】udp的recvfrom
A创建一个udp套接字,绑定到(IP1,PORT1),开两个线程,一个发送,一个接收B也是创建一个udp套接字,绑定到(IP2,PORT2),开两个线程,一个发送,一个接...
A创建一个udp套接字, 绑定到(IP1, PORT1), 开两个线程, 一个发送, 一个接收
B也是创建一个udp套接字, 绑定到(IP2, PORT2), 开两个线程, 一个发送, 一个接收
A和B相互可以发送和收到数据
然后B关闭套接字退出, 重新创建一个udp套接字, 绑定到(IP2, PORT3), 开两个线程, 一个发送, 一个接收
【注意】调试的时候, 发现在A调用recvfrom()后, 参数from的地址自动变成(IP2, PORT3), 并能接收到C发来的数据, C也可以接收到A
怎么会出现这样的情况, recvfrom()函数为什么会改变from参数的值?
===========================================================
后来在同一台机子上调试也是一样, 只要B退出重新绑定到新的端口, A在调用recvfrom()后, from的端口会自动变成B的【新端口】, A和B双方又可以通信了, 非常奇怪, 不是吗?
====================
A和B的套接字都把SIO_UDP_CONNRESET选项设置为false, 不知道是这个的原因不???? 展开
B也是创建一个udp套接字, 绑定到(IP2, PORT2), 开两个线程, 一个发送, 一个接收
A和B相互可以发送和收到数据
然后B关闭套接字退出, 重新创建一个udp套接字, 绑定到(IP2, PORT3), 开两个线程, 一个发送, 一个接收
【注意】调试的时候, 发现在A调用recvfrom()后, 参数from的地址自动变成(IP2, PORT3), 并能接收到C发来的数据, C也可以接收到A
怎么会出现这样的情况, recvfrom()函数为什么会改变from参数的值?
===========================================================
后来在同一台机子上调试也是一样, 只要B退出重新绑定到新的端口, A在调用recvfrom()后, from的端口会自动变成B的【新端口】, A和B双方又可以通信了, 非常奇怪, 不是吗?
====================
A和B的套接字都把SIO_UDP_CONNRESET选项设置为false, 不知道是这个的原因不???? 展开
展开全部
UDP本来就是这样的,不需要绑定IP,只需要绑定一个端口,Sendto函数会附带IP信息,recv的时候会解析进来连接的地址。因为udp没有固定的连接,所以不知道进来的连接的IP,只能通过recv函数去实时获取,这是UDP最基本的机制。
更多追问追答
追问
'不需要绑定IP'是什么意思, 直接绑定0.0.0.0旧可以吗, sendto()会自动找到一个合适的本地ip?
recvfrom会自动解析对方地址, 哪还要from参数干什么, 这样recvfrom()的套接字不成了类似TCP的监听套接字吗?接收不乱套了吗?而且微软关于recvfrom()的官方文档上没有这样的说明啊!
大哥能不能提相关资料
追答
绑定地址的时候,如果只绑定端口,表示接受该端口下任何IP发来的数据,如果绑定IP和端口表示接受该IP和端口的数据,然后recvfrom函数在流中有数据可读的时候,会把该数据源的IP和端口解析出来,然后再根据该IP做相应的处理就可以了。UDP对端地址信息,都是从recvfrom函数中读取出来的。
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询