我正在多台计算机之间创建聊天,但找不到 不在客户端计算机中的套接字连接到serverSocket 。
P.S。我是套接字编程的新手。
这是服务器
package chat;
import java.io.*;
import java.net.*;
import java.util.*;
public class Server {
public List<String> names = new ArrayList<String>();
public HashMap<String, Socket> sockets = new HashMap<String, Socket>();
public HashMap<String, BufferedReader> inputs = new HashMap<String, BufferedReader>();
public HashMap<String, PrintWriter> outputs = new HashMap<String, PrintWriter>();
public void start() throws IOException {
int port = 2019;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server started");
while(true) {
System.out.println("\nLooking for new channels in the subspace.");
Socket socket = serverSocket.accept();
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
System.out.println("Someone connected.");
new Thread() {
public void run() {
//various input/output operations
}
}.start();
}
}
public static void main(String[] args) throws IOException {
Server server = new Server();
server.start();
}
}
这是客户
package chat;
import java.io.*;
import java.net.*;
public class Client {
public Socket socket;
public BufferedReader input;
public PrintWriter output;
public void start() throws IOException {
String host = "192.168.1.4 / 127.0.0.1 / computer's global ip";
int port = 2019;
socket = new Socket(host, port);
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
System.out.println("Successfully established connection to " + host + ":" + port);
new Thread() {
public void run() {
//output operations
}
}.start();
new Thread() {
public void run() {
//input operations
}
}.start();
}
public static void main(String[] args) throws IOException {
Client client = new Client();
client.start();
}
}
现在,问题在于这在服务器和客户端位于同一台PC上时有效。
我将客户端文件的副本发送到另一台计算机,但是当我插入服务器计算机的IP(192.168.1.4)时,没有任何反应。
两台计算机均连接到同一WI-FI 。
另一个问题是:如何在没有相同WI-FI的情况下连接两台计算机?
答案 0 :(得分:0)
2 年后我对此有了足够的了解,所以我会回答以帮助任何有类似问题的人。 问题不在于 Java,客户端-服务器代码应该可以工作。 如果没有,则问题出在网络上:如果服务器连接到路由器(通常是这样),则无法直接访问它(它本身没有公共 IP,只有本地 IP) ; 使用的公共 IP 是路由器的 IP)。因此,您需要连接以进行“端口转发”,即告诉您的路由器到给定端口的任何连接都必须发送到 192.168.1."x" 本地 IP。这是 NAT 手持的。
TLDR 了解端口转发和公共/私有 IP。