日期:2014-05-20  浏览次数:20651 次

关于UDP 点对点消息的发送的问题
看那些UDP的例子,模式为:
客户端:IP地址设为IP1,发送消息到服务器指定的端口。
服务器端:接收IP1发送来的消息,此时能知道IP1的IP地址。
此时,如果想实现在服务器端,将IP1发送过来的消息经过一定的处理,然后发送到指定的客户主机(注:IP与IP1不一样),且设为IP2
这要如何实现呢?
再补充说明一下:IP2是客户端IP1指定的,就像QQ一样,我们可以指定一个好友,然后给他发消息。

说明:对例子有点不理解的是,服务器端接收了IP1的消息后,不是将消息发送到另一个IP,而是发回IP1,这是不是有点多余呢?
例子我就网上链接一个:
http://blog.csdn.net/wintys/article/details/3525643


------解决方案--------------------
你的需求就是个代理转发,并不难实现。

服务器端接收到来自于IP1客户端的消息后,如果要转发给IP2客户端;需要IP2同样开启了消息监听服务,也就是IP2其实可以理解为是服务端;那么接受了IP1消息的服务端,此时角色转变为IP2的客户端,将消息包发送给IP2即可。


例子一般都是以双向通讯为基础进行讲解,因为这个最基本,是功夫中的基本招数。只要双向通讯清楚了,多节点代理转发这种其实并不复杂,是功夫中的组合拳。

师傅带进门:教你基本招数;修行靠个人:实战中的组合拳看你自己了。
------解决方案--------------------
你只要收到消息,把收到的packet在包一个新的ip就转发了。这就是所谓的服务器。datagramSocket是点对点的,每台主机都可以算是服务器。也可以用个中转的机器当做服务器转发信息。
服务器端接收了IP1的消息后,不是将消息发送到另一个IP,而是发回IP1。
这个看你需求了,因为udp是面向无连接的,如果自己能收到服务器回发的消息,不是更好吗,不用在主机上区分谁发的消息,直接转发,减少服务器的负担。