TCP互联网传输打洞问题?????急!!!!!!

xuggzu 2010-03-15 10:48:17
互联网上,一端A是开放某一端口的带路由器电脑,端口映射已作,防火墙例外开启;另一端B也是带路由器电脑,有防火墙。
现在A想传输文件到B,如何实现?TCP打洞如何实现(因为无公网的中间服务器)??期待答案中。。。。。。。。。。。。。。。。。。

只有这点分了,希望有高手相助!
...全文
264 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
99263 2010-03-29
  • 打赏
  • 举报
回复
ADSL拨号,如果是通过了路由器上网,就不行了,而且正如楼上所说,是动态IP地址。
jackson35296 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 rollrock1987 的回复:]
服务器只需要有一个 公网IP地址就可以了 那也就是说 家里的宽带链接电脑后 也是可以作为服务器的 对吧??
[/Quote]

是的,可以做服务器。但是家庭的adsl一般为动态IP,拨一次号就变一次。如果是路由器拨号上网的,你的机器就属于内网了,不能做服务器。除非建立端口映射或完全暴露
yangtao639999 2010-03-18
  • 打赏
  • 举报
回复
借宝地请教个相关问题:
假设两个C端都有防火墙并且都在NAT后面 ,有转发打洞消息的服务器 , 请问:
1。是穿透防火墙写一段相关代码,穿透NAT写段相关。需要两段代码,还是两个根本就是一回事,能封装到一起??
2。如果这是两回事,那么数据包经过路由器的时候是先经过NAT,在由防火墙过滤喽?就是说先对数据包写NAT穿透,在写防火墙穿透???

3。哪位有防火墙穿透的源码??
jackson35296 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xuggzu 的回复:]
先感谢以上各位的答复,可是你们没有看清楚我说的意思,拿4楼的jackson35296帅哥答复的来说,其实B电脑才是listen电脑,因为实际上我要把数据从A发送给B。
如果是B发送给A,自然没有问题了。。。
[/Quote]

TCP数据是双向的,不管谁连接谁,只要连接上了,A发给B或者B发给A都没有问题。跟谁listen无关,并不是只有listen的才能接数据。listen的也可以发数据。
kevinmartin 2010-03-17
  • 打赏
  • 举报
回复
lz的要求,必须通过第三方服务器实现,即公网服务器,或者将A当成公网服务器。

没有别的路可以走。

尤其不可能在B不知情的情况下由A push 给B
zhou1xp 2010-03-17
  • 打赏
  • 举报
回复
可以在B的路由器上做一广播,然后让B来连接,只是不知道会不会出现广播风暴
hurryboylqs 2010-03-17
  • 打赏
  • 举报
回复
所以这里根本不是什么打洞问题
这里A能映射端口,也就是说A所处的路由必须具有公网IP!
否则就得走中转或者打洞路线了
奔跑前行 2010-03-17
  • 打赏
  • 举报
回复
这样 你看可不可以 利用A 当做服务器端 然后B 作客户端去连接 ,你A 有做端口映射,也类似外网机器了。。。。
hurryboylqs 2010-03-17
  • 打赏
  • 举报
回复
步骤是这样子的:
A想发数据给B
那么A先直连B,连不上那么A通过服务器中转告诉B 我想连接你
B知道后反连A即可
cqsfd 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xuggzu 的回复:]

先感谢以上各位的答复,可是你们没有看清楚我说的意思,拿4楼的jackson35296帅哥答复的来说,其实B电脑才是listen电脑,因为实际上我要把数据从A发送给B。
如果是B发送给A,自然没有问题了。。。
[/Quote]
A电脑一直监听,让B去连不一样吗!连上的话,不管A给B发 ,B给A发,有什么区别?
rollrock1987 2010-03-17
  • 打赏
  • 举报
回复
服务器只需要有一个 公网IP地址就可以了 那也就是说 家里的宽带链接电脑后 也是可以作为服务器的 对吧??
99263 2010-03-17
  • 打赏
  • 举报
回复
没有中间服务器,是没办法实现两个NAT之后的计算机互通的!楼主如果是商用的话,可以考虑AnyChat即时通讯平台开发包:[URL=http://www.anychat.cn]http://www.anychat.cn[/URL],支持UDP、TCP打洞,支持UPNP协议,可实现内网穿透,不过也是需要中间服务器来协助的。
rollrock1987 2010-03-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/rollrock1987/archive/2010/02/04/5289314.aspx
jackson35296 2010-03-15
  • 打赏
  • 举报
回复
你这种情况,根本无须打洞,也不涉及打洞。因为A已经做了端口映射,可以认为A就是外网机器。无论是谁传文件给谁,都必须A做服务端,B去连接A,然后就可以通信了。
A机器listen的端口必须是映射的那个端口,B机器直接connect路由器的公网ip和映射的那个端口即可。由于和你的机器建立了端口映射,路由器会直接把对该映射端口的数据转给你的机器处理。我曾经做过的,就把A机器当做外网机器用就行了,和打洞无关。打洞是没有建立端口映射的的情况下,两台同为内网的机器要通信,必须由公网上服务器协调建立通信通道。
Eleven 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuggzu 的回复:]

需要公网服务器我知道,但是A电脑映射了路由端口,防火墙端口也开启了,那么B先主动连接A,此时A可以获得B的信息,难道不能利用这个临时通道传数据吗?
[/Quote]
做了端口映射,应该可以的
xuggzu 2010-03-15
  • 打赏
  • 举报
回复
需要公网服务器我知道,但是A电脑映射了路由端口,防火墙端口也开启了,那么B先主动连接A,此时A可以获得B的信息,难道不能利用这个临时通道传数据吗?
JonathanS666 2010-03-15
  • 打赏
  • 举报
回复
打洞是需要公网服务器协调的
xuggzu 2010-03-15
  • 打赏
  • 举报
回复
...对了,忘说了,B电脑是不能控制的,也就是说B电脑无法进行映射之类操作,否则也不会有此一问。
xuggzu 2010-03-15
  • 打赏
  • 举报
回复
先感谢以上各位的答复,可是你们没有看清楚我说的意思,拿4楼的jackson35296帅哥答复的来说,其实B电脑才是listen电脑,因为实际上我要把数据从A发送给B
如果是B发送给A,自然没有问题了。。。
kevinmartin 2010-03-15
  • 打赏
  • 举报
回复
TCP没有打洞的说法。

这种情况下是A的公网端口已知,所以应该由B去连接A,A再给B发文件。这种属于PULL的模式,即主动模式。

如果想让A给B直接发文件,属于PUSH模式,那必须A要知道B的公网端口,即过路由器后的端口才行。

18,356

社区成员

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

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