两台计算机的Java服务器/客户端

时间:2019-01-02 14:55:00

标签: java sockets serversocket

我正在多台计算机之间创建聊天,但找不到 不在客户端计算机中的套接字连接到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的情况下连接两台计算机?

1 个答案:

答案 0 :(得分:0)

2 年后我对此有了足够的了解,所以我会回答以帮助任何有类似问题的人。 问题不在于 Java,客户端-服务器代码应该可以工作。 如果没有,则问题出在网络上:如果服务器连接到路由器(通常是这样),则无法直接访问它(它本身没有公共 IP,只有本地 IP) ; 使用的公共 IP 是路由器的 IP)。因此,您需要连接以进行“端口转发”,即告诉您的路由器到给定端口的任何连接都必须发送到 192.168.1."x" 本地 IP。这是 NAT 手持的。

TLDR 了解端口转发和公共/私有 IP。