【问题标题】:Java Server/Client for two computers两台计算机的 Java 服务器/客户端
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 您应该提供解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
  • 2018-12-08
相关资源
最近更新 更多