java socket连接问题 如何让socket连接跨过路由器

我从路由器一端A发出socket连接到外网的一个没有路由B的serversocket可以成功么?那么从B端发送一个socket连接到A端可以么?... 我从路由器一端A发出socket连接到外网的一个没有路由B的serversocket可以成功么?
那么从B端发送一个socket连接到A端可以么?
展开
 我来答
锁金生坚亥
2019-02-12 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:34%
帮助的人:1143万
展开全部
可以
但是会困难很多
就像qq这样的软件
首先就是把ttl设的大一些
这样保证过路由的时候不会把你的包扔了
其次就是一个nat的问题,如果是你和固定ip的服务器连接还好,就怕是两个客户端点点互联,对等体的连接是有些困难的,因为所有的pc几乎都在nat后面
比如你是192.168.0.1
而我是192.168.0.2
可是杂俩根本就不在一个网段,
这两个地址都是只是nat后面的保留地址
过nat的时候,可能你实际是123.1.1.1
而我是203.1.1.1
这次是这样
下次还会变
dhcp么
两个进程要想通信,就得知道彼此的真实socket
两个程序怎么知道彼此的ip呢?
这就需要一个固定ip的第三点(中心点服务器)
你和我上来都进行对固定ip的第三点连接
第三点就会拿到你和我的nat前面的真实地址
然后第三方
把我的真实地址告诉你
把你的告诉我
这样咱们就可进行点对点了
这就像我不知道你的电话,你也不知道我的电话,咱们怎么联系
只能通过路人甲,这个路人甲的电话是固定且已知的,咱们都先给路人甲打电话,然后他手机就能显示你的和我的号码了,他再把彼此的号码发给对方,双方就知道对方的号码了,就可以互相打电话了
比如tcp与udp的打洞和穿洞
就是这种nat穿越技术
这是p2p的基础
也是真实网络环境下点点互联的一个比较普遍的方案
a11e90
推荐于2017-11-05 · 知道合伙人软件行家
a11e90
知道合伙人软件行家
采纳数:473 获赞数:1702
qq交流群:208779755 博客:https://my.oschina.net/haitaohu

向TA提问 私信TA
展开全部
前者 你ip写的正确 而对方又没做什么限制的话 肯定是可以的,
后者 如果你在路由器做了 路由配置 是可以实现的 ,如果没有的话肯定不行
因为你没有唯一ip,所谓路由配置,你路由器有唯一ip 当他接到数据让他转给你 就ok了
追问
A已经与B成功连接了
那么B可以从与A建立socket中提取到一些信息使B可以发送向A的socket请求么?
追答
A发起后 B回复?
理论上说 应该是找不到的,因为外网包 并不知道你局域网情况 他需要做处理才可以,但我不知道java的包有没有做处理 你可以测试一下
但有一点可以肯定 B像A发起 需要做路由配置
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd9006
2017-11-05 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
A 的路由上,做端口映射
~~~~~~~~~~~~~~~~~~~~~~~~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Joshion2008
2013-07-03 · TA获得超过152个赞
知道小有建树答主
回答量:175
采纳率:0%
帮助的人:132万
展开全部
都是可以的,只要你得到对方的IP就可以了,进行三次握手,只要3次握手成功就都可以了。

这个不管是JAVA还是 C,都是一样的。都遵循TCP/IP协议
更多追问追答
追问
A端是有路由器的
没有外网IP 这个怎么连?
追答
这个肯定不行,没有IP,你怎么三次握手?连握手的目标都不存在。

不管是C/S还是B/S,他们都是已知对方的情况下进行的。

-----即使你有路由,其实也是有IP的。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式