关于socket的一点思考——外网连接内网?

 

       前段时间用Java又做了一个通信软件——山寨糗糗,一般这么简单的做一个聊天软件之后都会称之为局域网聊天工具,那么它到底能不能实现外网访问内网然后进行通信呢?这个问题在俺的脑海中萦绕许久。

       因为以前做的就是两个简单的客户端直接通信,不通过服务器,因此怎么由一个内网中的机器访问到另一个内网中的机器确实不好想想(maybe是能力有限)。不过这次用Java实现是通过一个服务器端来完成客户端通信的,那么可不可以由一个内网访问到一个外网,然后再由外网访问到内网呢?

       首先看一张图,软件在局域网内进行通信的示意图:

关于socket的一点思考——外网连接内网?_第1张图片


       这样客户端发送消息到服务器,然后服务器把消息转发到指定的客户端,这里客户端和服务器属于同一局域网,因此理解起来没有什么问题。这里需要考虑一下socket,这是进行消息转发的核心。需要注意的是如果这里面的所有客户端都是外网地址的话也是可以进行通信的,因为都是直接相连的。

       然后看一下通过外网通信的示意图:

关于socket的一点思考——外网连接内网?_第2张图片


       这样内网用户A首先登陆,这样呢就在外网服务器上建立了一个socket连接,然后每次进行通信的时候外网都会通过这个socket来发送消息。就是这样,外网和内网直接进行了通信,其核心也就是socket。(个人理解)

      

       网上有好多人发帖子问qq的通信是如何进行的,有人回复说通过查找路由表,找到地址,还有其他的一些答案,不过说实话我也不知道那个是对的。

      

       最后总结,其实重点就在socket上,这个socket里面到底包含的是什么,我目前还不知道,所以上面的文章都来自自己的假想。

 

你可能感兴趣的:(java,qq,socket,服务器,聊天,工具)