关于socket的一点思考——外网连接内网?
2010-10-23 18:42
393 查看
前段时间用Java又做了一个通信软件——山寨糗糗,一般这么简单的做一个聊天软件之后都会称之为局域网聊天工具,那么它到底能不能实现外网访问内网然后进行通信呢?这个问题在俺的脑海中萦绕许久。
因为以前做的就是两个简单的客户端直接通信,不通过服务器,因此怎么由一个内网中的机器访问到另一个内网中的机器确实不好想想(maybe是能力有限)。不过这次用Java实现是通过一个服务器端来完成客户端通信的,那么可不可以由一个内网访问到一个外网,然后再由外网访问到内网呢?
首先看一张图,软件在局域网内进行通信的示意图:
这样客户端发送消息到服务器,然后服务器把消息转发到指定的客户端,这里客户端和服务器属于同一局域网,因此理解起来没有什么问题。这里需要考虑一下socket,这是进行消息转发的核心。需要注意的是如果这里面的所有客户端都是外网地址的话也是可以进行通信的,因为都是直接相连的。
然后看一下通过外网通信的示意图:
这样内网用户A首先登陆,这样呢就在外网服务器上建立了一个socket连接,然后每次进行通信的时候外网都会通过这个socket来发送消息。就是这样,外网和内网直接进行了通信,其核心也就是socket。(个人理解)
网上有好多人发帖子问qq的通信是如何进行的,有人回复说通过查找路由表,找到地址,还有其他的一些答案,不过说实话我也不知道那个是对的。
最后总结,其实重点就在socket上,这个socket里面到底包含的是什么,我目前还不知道,所以上面的文章都来自自己的假想。
因为以前做的就是两个简单的客户端直接通信,不通过服务器,因此怎么由一个内网中的机器访问到另一个内网中的机器确实不好想想(maybe是能力有限)。不过这次用Java实现是通过一个服务器端来完成客户端通信的,那么可不可以由一个内网访问到一个外网,然后再由外网访问到内网呢?
首先看一张图,软件在局域网内进行通信的示意图:
这样客户端发送消息到服务器,然后服务器把消息转发到指定的客户端,这里客户端和服务器属于同一局域网,因此理解起来没有什么问题。这里需要考虑一下socket,这是进行消息转发的核心。需要注意的是如果这里面的所有客户端都是外网地址的话也是可以进行通信的,因为都是直接相连的。
然后看一下通过外网通信的示意图:
这样内网用户A首先登陆,这样呢就在外网服务器上建立了一个socket连接,然后每次进行通信的时候外网都会通过这个socket来发送消息。就是这样,外网和内网直接进行了通信,其核心也就是socket。(个人理解)
网上有好多人发帖子问qq的通信是如何进行的,有人回复说通过查找路由表,找到地址,还有其他的一些答案,不过说实话我也不知道那个是对的。
最后总结,其实重点就在socket上,这个socket里面到底包含的是什么,我目前还不知道,所以上面的文章都来自自己的假想。
相关文章推荐
- 关于socket编程的一点小思考
- 关于android中建立socket连接的一点小经验
- 关于各种电路板相互连接的一点思考
- .net Socket 外网连接内网 多客户端
- 关于CentOS 5.4下上无线网连接内网的一点心得
- 外网客户端访问校园内网的服务器——socket连接
- 外网客户端访问校园内网的服务器——socket连接
- 关于通过外网连接内网SQL Server服务器的方法!
- 关于foreach和for的一点思考
- 关于程序员成长的一点思考
- 关于IE缓存和AJAX的一点思考和疑问
- 让内网保持连接,外网断开再重联就会上不了网
- 关于测试用例的一点思考
- 关于xml学习的一点思考与总结
- 关于判定表的一点思考
- 关于技术人员转到项目经理的一点思考
- 关于linux kernel slab内存管理的一点思考
- 关于Windows下ShellCode编写的一点思考
- 关于华为的一点笔记和思考 推荐