看网上说的很玄呼,我不是很理解.谁能比较通俗的介绍一下.
比如 在公网有一个server S, 有两个client, A和B位于两个不同的内网, 假如单纯的A 与 S 通信,那么 A的connect 函数写的是 S的公网IP与端口吧? 而S收到的数据后, 得到与其连接的Socket的IP与端口 是 A的路由器的地址与端口吗? 如果是的话,那并
没有涉及到NAT转换呀? 这是路由器该干的事吧?!
假如 A要与B进行通信, 我的想法是这样: S返回B的路由的端口与IP 给A, A connect 这个地址与端口,与B进行通信. 而路由器自动将数据映射到各自相关的内网机器. 请大家说说我错在哪里了?
比如 在公网有一个server S, 有两个client, A和B位于两个不同的内网, 假如单纯的A 与 S 通信,那么 A的connect 函数写的是 S的公网IP与端口吧? 而S收到的数据后, 得到与其连接的Socket的IP与端口 是 A的路由器的地址与端口吗? 如果是的话,那并
没有涉及到NAT转换呀? 这是路由器该干的事吧?!
假如 A要与B进行通信, 我的想法是这样: S返回B的路由的端口与IP 给A, A connect 这个地址与端口,与B进行通信. 而路由器自动将数据映射到各自相关的内网机器. 请大家说说我错在哪里了?
解决方案 »
- 咨询个基本问题
- 跪求各位高手回答一个关于图像处理的基础问题
- 树形控件问题求助
- SetWindowPos 改变多个窗口的位置
- 关于手机短信发送的几个问题
- 高手指点,编译提示:fatal error C1010: unexpected end of file while looking for precompiled header directive
- 在VC里怎么自定义消息?
- 了解SOCKS的请进!关于SOCKS的BIND命令
- 求救:为何返回的类成员函数指针不能被承认???(再次提问,两次共200分)
- 救急!能不能在COM中调用自己的Dll啊?多谢
- 如何在VC中发送http命令?
- 在MFC中嵌入了WORD,如何让WORD打开时,就是编辑网页的状态?
对,没错!"而S收到的数据后, 得到与其连接的Socket的IP与端口 是 A的路由器的地址与端口吗?"
主要看路由器是怎样实现NAT的,多数情况下,S获得的IP和端口是路由器的IP和路由器内的NAT表的一个索引“假如 A要与B进行通信, 我的想法是这样: S返回B的路由的端口与IP 给A, A connect 这个地址与端口,与B进行通信. 而路由器自动将数据映射到各自相关的内网机器. 请大家说说我错在哪里了? ”不清楚你是用TCP还是UDP实现,还是混合使用,对于不同协议,需要处理不同情况,例如对于TCP,需要设置端口重用。。
另外一个,B没有请求A的情况下,A自主来连接B,一般来说,B的防火墙认为A的数据是不请自来,会拒绝的。关于NAT穿透,我现在也在研究中,有机会一起讨论,^_^
如果没有防火墙,B要接受A的连接,B必要绑定一个端口,这个端口就是B和S连接时,使用的端口
既:内网中的两个客户端A,B,连接到外网的服务器S,在S处都有相对应的A和B的ip地址和端口号.
假如 A要与B进行通信,
首先,A通知服务器S,让B向A发送udp包,S发报文给B,报文中报含将A对应的ip地址和端口号.
其次,A可以从服务器S处获取到B对应的Ip地址和端口号.A根据B的IP地址和端口号向B发送udp包.(肯定会失败,因为B的nat会丢弃)
再次,B根据S发送过来的报文请求,向A的Ip地址和端口号向A发送udp包.
至此,A与B之间就可以进行upd发送报文了.
最近也是在研究这个,还望指教.
[首先] : B 从 S 获得 A的ip与端口
[其次] : A 从 S 获得 B的 ip 与端口, A发送udp包会失败(既然会失败为什么要发送呢? 很费解啊?)
[再次] : B 向 A 发送 udp包 , 这样 A 是否也会丢弃这个包呢? 这样两者怎么能进行通信呢?
[其次] : A 从 S 获得 B的 ip 与端口, A发送udp包会失败(既然会失败为什么要发送呢? 很费解啊?)
这个是为了在A的路由防火墙留个记录,使得下次B的数据到来的时候,A的路由防火墙认为这些数据是A请求的数据,这样A的路由防火墙就不会抛弃这些数据了。
[再次] : B 向 A 发送 udp包 , 这样 A 是否也会丢弃这个包呢? 这样两者怎么能进行通信呢?
不会了,因为A已经向B发送了数据,B的数据到达A的路由时候,路由认为是A请求的数据,不会再拒绝了
http://zhaisj.blog.51cto.com/219066/58651
看完看这个(有源码)
http://www.ppcn.net/n1306c2.aspx
最后看这个
http://www.ppcn.net/n3520c38.aspx