多线程的情况下如何区分UDP返回的信息包?(150分)

  • 主题发起人 主题发起人 base1
  • 开始时间 开始时间
B

base1

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编写一个涉及到多线程的程序时,如果每一个线程都用UDP协议向对方发送一个UDP请求,
然后等待对方的UDP返回信息包,不知道用什么方法才能使每一个线程能接收到自己所发
送请求信息包相对应的返回信息包?
请大虾不吝赐教!
 
每个线程使用不同的UDP端口,根据端口判别
 
你自己定义的数据结构中包含你线程的句柄或者一个标识符不就行了
 
>>wys205:
对方返回的端口号和本方所发送的端口号是没有关系的,所以用端口号无法判别
是哪个线程所发送线程的信息包的返回信息
>>huanGe:
可是对方返回的数据结构(即所返回的PDU包)有其标准格式,不能自己定义亚.
 
UDP不能返回结果,但是你可以通过SOCK获取对方的IP地址和端口。
 
但是获得了对方的ip地址和端口还是没有用,因为问题的关键在于多个线程向一个目的地
发送了请求后,怎样使每个线程都可以从众多的返回udp中准确的找到返回给自己的应答。
因为udp是非面向连接的,而通信所使用的pdu(也就是由发送者自己定义的发送格式部分)
又是固定的,所以似乎只能从发送方利用线程的同步机制进行控制。但是这样做就非常麻
烦了。我想,提问者的意思在于有没有通信上机制可以保障各个线程识别自己的应答,使
程序简单而又可行。
 
>>对方返回的端口号和本方所发送的端口号是没有关系的
怎么会没有关系,返回的UDP首部应包括源端口和目的端口,如果没有对应关系
同时使用两个OICQ(基于UDP),应该会发生发送消息混乱的情况
 
可是返回回来的UDP包所设的Port端口号为0,这是怎么回事呢?
 
UDP 通讯建立时系统会为每个连接自动找一个新的可用端口.
比如 UDP 服务器监听 5003 端口,当有客户传数据到 5003 时,
系统会分配一个新的端口,例如1258, 只要客户端 socket 和服务器端 socket 不关闭,
它们之间实际上是在1258上通讯.而 5003 留给新的客户来请求连接.

多线程程序中,每个多线开启一个UDP连接,它们的端口不同 1258,1260 ...,
数据不会相互干扰.
 
多人接受答案了。
 
后退
顶部