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

hehaheha 2007-09-18 05:07:13
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通讯呢?
...全文
434 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hehaheha 2007-11-27
  • 打赏
  • 举报
回复
看了这么多回复看样子只能采用服务器转发模式了,谢谢各位。
Torch009 2007-09-30
  • 打赏
  • 举报
回复
网上好多这个
nooning 2007-09-28
  • 打赏
  • 举报
回复
这不是p2p 物理隔离的两个网段有两种方案,在中间的服务器上安装路由NAT路由软件,要出站的一方把中间的服务器设为网关
2使用代理,在中间服务器上安装proxy,socks5 支持 tcp/udp,使用socks5可以支持更多的应用,如果你的应用软件不支持,可以用代理外挂,什么名忘了
jsphuang 2007-09-23
  • 打赏
  • 举报
回复
看情况中间机就是一台普通的子网内计算机,
和P2P的服务器有区别。
coldplay968 2007-09-21
  • 打赏
  • 举报
回复
不懂来学习
masterz 2007-09-20
  • 打赏
  • 举报
回复
http://tag.csdn.net/tag/p2p.xml
hehaheha 2007-09-19
  • 打赏
  • 举报
回复
研究了下nat发现跟我这种情况还不太一样。

我的A子网机器与中间机通讯取得的确实是一个公网IP,但是B子网机器与中间机为同一内网机器。
但A子网机器能访问中间机,现在我B网访问A网可以通过打洞,但是A网访问B网就不能通过打洞了,因为B网和中间机为同一内网。

不知道该咋整了。
sfq12345678 2007-09-19
  • 打赏
  • 举报
回复
关注,我也在研究这种技术,完成文件传输。。。。
hehaheha 2007-09-19
  • 打赏
  • 举报
回复
设置网关肯定是不行的,因为网络我无权控制。
看下来最好的方式就是:nat了
代理的方式估计也能实现,但较麻烦
sdpdww 2007-09-19
  • 打赏
  • 举报
回复
我们的软件也是遇到了和你类似的问题,我们的软件让客户端上线用到的是组播,也就是没有办法跨网段,后来就是用到了转发的模式,寻找一些中继节点进行转发,这样应该可以达到目的。
hediant 2007-09-18
  • 打赏
  • 举报
回复
请参看P2P之UDP穿透NAT的原理与实现(附源代码),是解决这类问题很好的材料(吐血推荐):
http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt

源码请到这里下载
http://www.ppcn.net/upload/2004_05/04052509317298.rar
vocanicy 2007-09-18
  • 打赏
  • 举报
回复
注意下面提到的内网、外网是相对于网关

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

外网机器recvfrom取得的对方ip为子网出口IP(及子网的对外IP),这个是正确的,因为对方发送过来的报文在网关做了源地址转换,你直接通过这个地址和端口就可以发送到对方了
shyrock 2007-09-18
  • 打赏
  • 举报
回复
两个网段之间加网关,A网网卡用192.168.0.1,B网网卡用172.16.0.1,
然后A网机器网关设为192.168.0.1,
B网机器网管设为172.16.0.1,
这样就可以跨子网访问了
caicaileowince 2007-09-18
  • 打赏
  • 举报
回复
A网和B网之间搞一个网关,然后通过网关来通信,你内网的机器也不是通过网关来和新浪搜狐进行tcp连接,
smaltdd 2007-09-18
  • 打赏
  • 举报
回复
一起探讨一下,我也不懂啊,说错了还请修正。

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

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

你的意思是代理方式实现吗?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧