关于javaSocket外网通信的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于javaSocket外网通信的问题相关的知识,希望对你有一定的参考价值。

网络环境:内网局域网通过路由器连接到外网。
1、本地电脑cmd可以ping通外网,如百度主页。
2、浏览器访问百度主页是正常的。
问题:
1、电脑能ping通一个ip,是不是说明本机与这个ip能够建立连接?
2、既然能使用浏览器或者cmd访问到外网ip,为何程序无法识别外网ip?
3、如果问题2中是要改什么路由器nat转发设置之类的,我想问问,为何我玩游戏,登录qq,看网页,都是要与外网服务器建立连接,为何又不用改设置就能实现通信?

求各种人士解答,答不完整没关系
不能与百度通信的问题我已经搞定。
现在的问题是:
给在另一个局域网的外网ip上发送请求不能建立连接。查看了对方的网络映射,都通过了路由器,是不是对方的路由器屏蔽了我的请求,怎样才能让我的请求发到另一个局域网的某个电脑上

路由器发给局域网电脑的IP是内网IP,你连接的是路由器处于外网的IP,数据发送到路由器上,路由器并不知道你需要连接的是内网的哪台电脑,于是连接失败。

解决方法就是做路由器端口映射。让路由器吧指定端口上的连接全部都转发到指定的内网电脑上。这样内网的电脑才能对连接做出响应。追问

不设置路由端口有办法解决么?

追答

有一台公网IP的电脑做服务器, 然后进行穿洞

参考技术A 如果你请求的电脑是在另一个局域网,是需要在那个局域网的路由器设置端口映射,将指定端口的请求映射到具体的内网ip,注意80端口是不行,这个好像是被运营商给屏蔽了。追问

更改路由转发的方法我已经知道了可以,但是和我的需求不符合。我是想做一个桌面程序,实现ip和端口直接通信。但是受到路由的制约无法实现了。我不可能让人去改路由转发规则。
有没有什么其他技术实现通信?类似teamviewer的通信手段

追答

teamviewer都是有分配ID的,应该是有借助服务器帮忙转发,实际是内网--公网--内网的形式,因此可以往这个方面思考!

追问

我了解了下打洞技术,貌似teamviewer是使用的打洞来通信的,在网上找了下,没有找到关于打洞技术的实际性的东西

关于svn外网访问的问题-搭建成功

昨天聊到了svn外网问题。今天,无限查资料,虽然眼累了一些,不过最终实现。还是开心了一下!

背景:本机设置svn服务器,搭建代码库并开设外网 供不再同一地点的他人来访问

上图:

1.svn服务器端 搭建成功

技术图片

 

2.下载安装 花生壳动态域名 客户端,注册帐号并登陆,会有一个免费的域名,点击域名打开域名诊断 出现:

技术图片

注:此处应该显示  已激活 (当然也可以去cmd中ping一下,还不一定ping筒,因为我就时灵时不灵,留着后续说把!)

3.利用浏览器 登录路由器设置 如下:

技术图片

如图 登录花生壳帐号!

4.在路由设置中打开虚拟服务器

技术图片

5.哦  对了 别忘了ip跟本机的mac进行绑定,  这是为了动态分配ip的时候发生变化 因其麻烦

技术图片

 成功:

技术图片

以上是关于关于javaSocket外网通信的问题的主要内容,如果未能解决你的问题,请参考以下文章

Java Socket实战之六 使用NIO包实现Socket通信

JAVA Socket 编程学习笔记

关于内网和外网的理解

关于 java socket的消息推送问题

关于Linux 虚拟机如何才能ping 通外网

面试题Java 的通信编程,编程题(或问答),用JAVA SOCKET 编程,读服务器几个字符,再写入本地显示?