为什么UDP发送和接收的端口号必须一致?

来源:百度知道 编辑:UC知道 时间:2024/06/06 07:41:47
就是在自己的程序中实现UDP通信时,socket绑定的本地端口号和要将数据发送到的网络端点的端口号必须一致.否则将收不到消息.
这是本人的"知道"新号,没几个几分,不是本人吝啬,请高手帮忙啊.谢谢.

这是通讯协议规定的。
网络通讯中,IP地址+端口才能唯一标识一个真实的通讯地址。
就像是现实中如果写信给一个人,发信人必须写清楚省市区和邮箱号,收件人有同一个邮箱的钥匙才能收到信一样。
IP地址指明了具体的计算机,就像是发信时指明了小区的楼号
而端口指明了具体的收信人,就像邮箱指明同一栋楼(同一计算机)里的具体哪个门牌号一样。

UDP在外网通信时,需要由内网客户端向外网(独立IP,不经过路由)的服务器发出消息,内网路由会打开一个洞,短时间允许外网目标ip和目标端口往回发消息,否则外网的消息发不到内网的电脑上,直接被路由扔了。所以
对于服务器来说,哪个端口接收的,就要用哪个端口发回来,还得尽快发,否则内网路由就把洞堵住了。外网再发消息,或者不是“原路返回”的消息,统统被丢掉。。。。所以伱收不到啦。
同样,路由会把返回的消息转发到客户端ip指定的端口上,如果端口不一样的话,伱的客户端也收不到。。。

DatagramSocket用于接收和发送UDP的Socket实例。该类有3个构造函数:DatagramSocket():通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。程序会让操作系统分配一个可用的端口。DatagramSocket(int port):创建实例,并固定监听Port端口的报文。通常用于服务端。

没这个说法,
只是,如果你不指定监听端口号的话,客户端怎么监听?服务器端又如何知道要返回给客户端哪个端口呢?
一般情况下,服务器端根据客户端的端口号返回的,比如客户端使用1024发送到服务器端的80端口,那么服务器端接收后返回到客户端哪个端口呢?所以还是返回1024最好。

《梦里无寻处》:月儿行云何处去?忘了归来,不道春将暮。百草千花寒食路,香车系在谁家树。泪眼倚楼堪独语,双燕来时,陌上相逢否?撩乱春愁如柳絮,依依梦里无寻处。