java socket 问题

Posted

tags:

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

背景: 我想做一个跨路由的聊天程序,服务器端在路由器A下,局域网ip地址为 192.168.0.103 路由器ip为
假设为 202.207.208.209;
客户端在路由器B下,局域网ip也是192.168.0.103, 路由器ip假设为202.207.208.210
这是我写的服务器端的ServerSocket: 我在路由器里设置了端口映射10019端口
String st=new String("192.168.0.103");
ServerSocket serverSocket=new ServerSocket(10019,1,InetAddress.getByName(st));
这是我写的客户端Socket:
Socket socket=new Socket(InetAddress.getByName("202.207.208.209"),10019,InetAddress.getByName(“192.168.0.103”),10018);
但是出现错误 java.net.ConnectException: Connection refused: connect
求高手指教!!!

TCP 协议明确规定 192.168.* 是无法跨越互联网路由器的,这个是 C 类地址中的,另外还有 B 类地址 172.16 及 A 类地址中的列表也有类似规定,路由器默认设置都是把数据包隔离在局域网内,不会转发到外面去。

即使双方机器 IP 不相同但都在 192.168.* 范围内依然无法跨越互联网路由器。

所以你想在跨路由器上处理需要进行 NAT 转换,在两方路由器上都为某个 IP 进行 NAT 映射,比如: 把 01001 映射为 192.168.0.1 的聊天端口,把 01002 映射为 192.168.0.2; 10103 映射到 192.168.10.103 的聊天端口上,依此类推。给 A 网 10.103 发送消息就连接到 202.207.208.209:10103 端口。
参考技术A 源地址、目标地址,是相同的。程序认为是本机,而你本机又没有监听端口,所以连接失败。

你在A网通过ping、或共享访问如何访问B网的同IP的?你现在就如何做。

以上是关于java socket 问题的主要内容,如果未能解决你的问题,请参考以下文章

linux用java socket与c的socket通信乱码问题

Java Socket通信以及可能出现的问题解决

Java中使用Socket连接判断Inputstream结束,java tcp socket服务端,python tcp socket客户端

Java Socket通信介绍及可能遇到的问题解决_java - JAVA

使用 socket.io-client.java 库连接到 socket.io 命名空间

Java 的 Socket 使用哪种协议?