java socket连接问题 如何让socket连接跨过路由器
发布网友
发布时间:2022-04-20 07:06
我来回答
共4个回答
热心网友
时间:2023-06-27 11:28
可以
但是会困难很多
就像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的基础
也是真实网络环境下点点互联的一个比较普遍的方案
热心网友
时间:2023-06-27 11:29
前者 你ip写的正确 而对方又没做什么*的话 肯定是可以的,
后者 如果你在路由器做了 路由配置 是可以实现的 ,如果没有的话肯定不行
因为你没有唯一ip,所谓路由配置,你路由器有唯一ip 当他接到数据让他转给你 就ok了追问A已经与B成功连接了
那么B可以从与A建立socket中提取到一些信息使B可以发送向A的socket请求么?
追答A发起后 B回复?
理论上说 应该是找不到的,因为*包 并不知道你局域网情况 他需要做处理才可以,但我不知道java的包有没有做处理 你可以测试一下
但有一点可以肯定 B像A发起 需要做路由配置
热心网友
时间:2023-06-27 11:29
A 的路由上,做端口映射
~~~~~~~~~~~~~~~~~~~~~~~~~~
热心网友
时间:2023-06-27 11:30
都是可以的,只要你得到对方的IP就可以了,进行三次握手,只要3次握手成功就都可以了。
这个不管是JAVA还是 C,都是一样的。都遵循TCP/IP协议