【发布时间】:2019-01-02 14:54:59
【问题描述】:
我正在多台计算机之间创建聊天,但我找不到如何将套接字连接到 不在客户端计算机中的 serverSocket。
附:我是套接字编程的新手。
这是服务器
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();
}
}
现在,问题是这在服务器和客户端在同一台电脑上时有效。
我向我的另一台计算机发送了客户端文件的副本,但是当我插入服务器计算机的 ip (192.168.1.4) 时没有任何反应。
两台计算机均连接到同一个 WI-FI。
另一个问题是:如何连接两台没有相同WI-FI的电脑?
【问题讨论】:
-
您的路由器必须允许机器之间的通信,这可能在您的路由器设置中被禁用。您的计算机必须允许端口 2019 上的连接,因此您可能需要在防火墙中创建规则(或禁用它)。
-
我为两台计算机上的 jar 文件创建了防火墙规则,但是这还不起作用。
标签: java sockets serversocket