#不同子网 UDP 通讯有关问题,盼复!

######不同子网 UDP 通讯问题,盼复!!!!
UDP中   sendto     recvfrom都需要提供IP地址,现在的情况是。
A子网       B子网
A子网中一台机器   192.168.0.*       B子网中一台机器172.16.0.*   两台机器不能互相ping通,我的服务器架在A网和B网之间的一台机器,该机器A网B网都能访问,我现在的方式是如果通过UDP发送后没有回复消息,则通过服务器通过tcp转发。

问题:
1.是不是有更好的方法实现直接用UDP通讯。
2.recvfrom取得的对方ip为子网出口IP(及子网的对外IP),如何获得真实IP
3.如果QQ采用的UDP,那跟我这样的环境就一样了,为什么能直接UDP通讯呢?

------解决方案--------------------
一起探讨一下,我也不懂啊,说错了还请修正。

先不说程序实现,先看看怎么从网络协议上进行实现。

我了解:跨网,主要是以下方式:桥,路由,以及NAT,好像还有代理。

你的意思是代理方式实现吗?
------解决方案--------------------
两个网段之间加网关,A网网卡用192.168.0.1,B网网卡用172.16.0.1,
然后A网机器网关设为192.168.0.1,
B网机器网管设为172.16.0.1,
这样就可以跨子网访问了
------解决方案--------------------
注意下面提到的内网、外网是相对于网关

内网的机器必须先发送数据,这时网关将数据包的源地址转换为网关对外的IP,并会自动增加一条NAT记录,这时就可以实现互通。

外网机器recvfrom取得的对方ip为子网出口IP(及子网的对外IP),这个是正确的,因为对方发送过来的报文在网关做了源地址转换,你直接通过这个地址和端口就可以发送到对方了

------解决方案--------------------
我们的软件也是遇到了和你类似的问题,我们的软件让客户端上线用到的是组播,也就是没有办法跨网段,后来就是用到了转发的模式,寻找一些中继节点进行转发,这样应该可以达到目的。
------解决方案--------------------
http://tag.****.net/tag/p2p.xml
------解决方案--------------------
看情况中间机就是一台普通的子网内计算机,
和P2P的服务器有区别。
------解决方案--------------------
这不是p2p 物理隔离的两个网段有两种方案,在中间的服务器上安装路由NAT路由软件,要出站的一方把中间的服务器设为网关
2使用代理,在中间服务器上安装proxy,socks5 支持 tcp/udp,使用socks5可以支持更多的应用,如果你的应用软件不支持,可以用代理外挂,什么名忘了