>我正在尝试在连接到网络的机器(服务器((例如通过网络X的热点(和连接到网络Y热点的另一台(客户端(之间建立连接。
问题 1:
如果服务器和客户端(可以是 多个(连接到同一网络(例如X(,但如果服务器和 客户端在不同的网络(X 和 Y(上,然后我正在连接 超时错误。
问题 2:
如果服务器和客户端在同一网络上(此处通过路由器(,则 他们无法连接上述相同的错误。我已经完成了移植 转发(这里:5555(与我的路由器和防火墙和防御者放 到客户端和服务器的关闭。
我错过了什么。请检讨 !!
-
附加服务器的代码片段:
import java.net.*; import java.io.*; class ServerSideConnection{ public static void main(String args[]){ try{ while(true){ ServerSocket socket = new ServerSocket(5555); Socket serverinput = socket.accept(); Mutithrd_excutn mutithrd_excutn_obj = new Mutithrd_excutn(serverinput); mutithrd_excutn_obj.start(); socket.close(); } }catch(IOException e){ } } } import java.net.*; import java.io.*; class Mutithrd_excutn extends Thread{ public Socket serverinput; public Mutithrd_excutn(Socket serverinput){ this.serverinput = serverinput; } public void run(){ try{ BufferedReader br = new BufferedReader(new InputStreamReader(serverinput.getInputStream())); PrintWriter pw = new PrintWriter(serverinput.getOutputStream()); BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in)); String str_client = ""; String str_server = ""; while(true){ str_client = br.readLine(); System.out.println("Client : " + str_client); if(str_client.equals("stop")){ return; } str_server = br1.readLine(); pw.println(str_server); pw.flush(); } //serverinput.close(); //socket.close(); }catch(IOException e){ } } }
为 客户端附加代码片段(我正在输入本地主机 服务器机器的 IP 地址(:
import java.io.*; import java.net.*; public class ClientSideConnection { public static void main(String[] args) { try { Socket s = new Socket("localhost",5555); PrintWriter pw = new PrintWriter(s.getOutputStream()); BufferedReader br_client_input = new BufferedReader(new InputStreamReader(System.in)); BufferedReader br_server_output = new BufferedReader(new InputStreamReader(s.getInputStream())); String str_client = ""; String str_server = ""; while(!str_client.equals("stop")) { str_client = br_client_input.readLine(); pw.println(str_client); pw.flush(); if(!str_client.equals("stop")) { str_server = br_server_output.readLine(); System.out.println("Server : " + str_server); } } br_client_input.close(); br_server_output.close(); s.close(); }catch(IOException e) { } }
}
另外,如果我可能错过了阐述问题的任何一点,请写下评论。
如果它在同一网络中工作,但不在不同的网络之间工作,那么我会看到以下选项:
- 有一些防火墙阻止了连接
- 或者您设置的端口转发错误
- 或者您使用了错误的目标IP,即目标网络中的私有IP,而不是端口转发中的公共可见IP
不幸的是,您的问题不包含足够的细节来进一步限制选项,即不知道端口转发是如何完成的,以及您在测试中使用哪个 IP 地址(内部或外部(作为服务器地址。