Java 套接字连接程序(TCP/IP)适用于本地主机/公共网络,但不适用于其他IP
我试图在连接到网络(例如通过网络X的热点)的机器(服务器)和连接到网络Y的热点的另一台(客户端)之间建立连接 第1期: 如果服务器和客户端(可以 多个)连接到同一网络(如X),但如果服务器和 客户端位于不同的网络(X和Y)上,然后我将获得连接 超时错误 第二期: 若服务器和客户端位于同一网络上(此处通过路由器),则 他们无法连接到相同的上述错误。我已经做完了 转发(此处:5555)与我的路由器、防火墙和defender放置 关闭客户端和服务器 我错过了什么?请复习Java 套接字连接程序(TCP/IP)适用于本地主机/公共网络,但不适用于其他IP,java,sockets,networking,router,tcp-ip,Java,Sockets,Networking,Router,Tcp Ip,我试图在连接到网络(例如通过网络X的热点)的机器(服务器)和连接到网络Y的热点的另一台(客户端)之间建立连接 第1期: 如果服务器和客户端(可以 多个)连接到同一网络(如X),但如果服务器和 客户端位于不同的网络(X和Y)上,然后我将获得连接 超时错误 第二期: 若服务器和客户端位于同一网络上(此处通过路由器),则 他们无法连接到相同的上述错误。我已经做完了 转发(此处:5555)与我的路由器、防火墙和defender放置 关闭客户端和服务器 我错过了什么?请复习 为服务器附加代码段:
- 为服务器附加代码段:
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地址: }
此外,如果我在阐述问题时遗漏了任何一点,请写下评论。如果它在同一网络中工作,但不是在不同网络之间工作,则我会看到以下选项:
- 有防火墙阻止了连接
- 或者您设置的端口转发错误
- 或者您使用了错误的目标IP,即目标网络中的专用IP,而不是来自转发端口的公共可见IP
遗憾的是,您的问题没有包含足够的详细信息来进一步限制选项,即不知道端口转发是如何完成的,以及您在测试中使用哪个IP地址(内部或外部)作为服务器地址。谢谢您的回答。但是如果服务器和客户端在不同的网络上(我在不同的android热点上连接了这两个系统),那么我也会收到连接超时错误。我们在热点连接中也需要端口转发吗?@Akash:如果客户端和服务器位于不同的热点,那么它们位于不同的网络中。很可能这些网络使用的是,这意味着它们不会通过internet进行路由,这意味着您需要端口转发,并且需要访问服务器的公共可访问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) {
}
}