返回信息流在客户端我用了这样的语句 Socket socket=new Socket("192.168.1.105",6000);
但是这个ip地址似乎只能实现同一个局域网内的通讯,或者同一台计算机自己通讯
如果我想实现两个在不同局域网内的计算机的通讯该怎么办呢~~
急需大神帮助~~
这是一条镜像帖。来源:北邮人论坛 / communications / #24762同步于 2014/8/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖
[问题]socket通讯中怎样的ip地址可以实现不同局域网的通讯哇~~
z2012212787
2014/8/10镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
用的JAVA? JAVA PYTHON 这些高级语言对socket的封装是不完善的
仅仅使用socket API是实现不了两个局域网之间通信的
想实现的话 使用一下网络库吧 c++的muduo java的netty 还有什么不太了解的 libevent ACE等等
【 在 z2012212787 (biubiu) 的大作中提到: 】
: 在客户端我用了这样的语句 Socket socket=new Socket("192.168.1.105",6000);
: 但是这个ip地址似乎只能实现同一个局域网内的通讯,或者同一台计算机自己通讯
: 如果我想实现两个在不同局域网内的计算机的通讯该怎么办呢~~
: ...................
【 在 z2012212787 的大作中提到: 】
: 在客户端我用了这样的语句 Socket socket=new Socket("192.168.1.105",6000);
: 但是这个ip地址似乎只能实现同一个局域网内的通讯,或者同一台计算机自己通讯
: 如果我想实现两个在不同局域网内的计算机的通讯该怎么办呢~~
: ...................
这2个局域网中的通信和socket的关系不大吧,要2个局域网之间能通信就要双方能够确定对方的地址。
而你2个都在局域网中,这视乎就有关打洞的问题的吧,或者是使用一个公网的服务器做中转?
你这种叫做P2P,需要一个中间服务器做一下打洞中转,当然只是建立连接时中转一下,连接建立了之后中间服务器就没用了。
是这样的,如果一台服务器都隐藏在内网里并分配了内网IP,那么你从外网是无法给它发消息的,因为你既不知道它的外网ip,也不知道它的外网端口。
但是,它是可以给其他人发消息的(内网电脑就是这样上网的,这种技术叫做“NAT”,俗称网络地址转换),实现的方式就是当路由器需要将内网的一个ip包发送到外网时,就会从自己的外网端口列表中拿出一个端口绑定内网ip和端口,然后用路由器的外网ip和这个端口替换掉ip包中原有的内网ip和端口,然后发出去,并且如果外网有ip包发往这个端口,就会自动转发到原有的内网ip和端口。这样就实现了从外网往内网发信息。
如果你的两台电脑都是这样,就要往同一个服务器上发送一个ip包,这样服务器就知道了这两台电脑的外网ip和端口了,服务器再将两台电脑的外网ip和端口告诉对方,然后两个电脑就可以互相通信啦。
这种技术叫做“打洞”,是P2P的关键技术。
学习了~~
【 在 luntan 的大作中提到: 】
: 你这种叫做P2P,需要一个中间服务器做一下打洞中转,当然只是建立连接时中转一下,连接建立了之后中间服务器就没用了。
: 是这样的,如果一台服务器都隐藏在内网里并分配了内网IP,那么你从外网是无法给它发消息的,因为你既不知道它的外网ip,也不知道它的外网端口。
: 但是,它是可以给其他人发消息的(内网电脑就是这样上网的,这种技术叫做“NAT”,俗称网络地址转换),实现的方式就是当路由器需要将内网的一个ip包发送到外网时,就会从自己的外网端口列表中拿出一个端口绑定内网ip和端口,然后用路由器的外网ip和这个端口替换掉ip包中原有的内网ip和端口,然后发出去,并且如果外网有ip包发往这个端口,就会自动转发到原有的内网ip和端口。这样就实现了从外网往内网发信息。
: ...................
internet最开始就是这个概念。局域网内,如果是以太网就ARP找到对端然后通信,超出局域网的范围,就通过网关中转,网关外面的世界你不用管。
但目前到处都是NAT,破坏了这个规则。如果要建立TCP连接,就需要像luntan说的那样去做
【 在 qyz0123321 的大作中提到: 】
: 难道不是直接连接就可以了吗?我记得我的是直接写对方IP就连上了啊?
【 在 bigeye 的大作中提到: 】
: internet最开始就是这个概念。局域网内,如果是以太网就ARP找到对端然后通信,超出局域网的范围,就通过网关中转,网关外面的世界你不用管。
: 但目前到处都是NAT,破坏了这个规则。如果要建立TCP连接,就需要像luntan说的那样去做
:
哦,我明白了。我理解的是LZ要用传统的C/S通讯,服务器端已经有一个端口在Listen,客户端主要Connect过去就行了。如果是P2P的话,的确需要打洞。。