Java ServerSocket 不会从客户端发送或接收消息



我有这两个类 client.java server.java ,每个都包含main方法。这个想法非常简单,其中的代码非常相似。我要实现的目标是打开 server 使用ServerSocket在特定端口上听,然后打开A client ,然后使用Socket连接到服务器,以便我可以最后,将消息从 client 发送到 server 并反向直到我关闭连接。

到目前为止,我尝试了最简单的示例,打开了 server port 4444,然后在 same> same> Same PC上打开了一个客户端要连接到地址 127.0.0.1(localhost(,on port 4444。,从服务器到客户端或客户端到服务器。

最后一个问题是,我该怎么做才能在服务器和客户端之间交换消息?我应该修改什么?

客户端。Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
    private static Socket client;
    private static BufferedReader in, console;
    private static PrintWriter out;
    private static String serverAddress;
    private static int port;
    public static void main(String[] args) {
        try {
            console = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Connect to server address (example 192.168.10.11): ");
            serverAddress = console.readLine();
            System.out.print("Port: ");
            port = Integer.parseInt(console.readLine());
            System.out.println("nTrying to connect...");
            client = new Socket(serverAddress, port);
            System.out.println("Connected to " + client.getRemoteSocketAddress());
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            out = new PrintWriter(client.getOutputStream());
            out.write("Connected!!!!!!");
            Thread input = new Thread() {
                public void run() {
                    String tmp;
                    try {
                        while((tmp = in.readLine()) != null) {
                            System.out.println("Server: " + tmp);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            Thread output = new Thread() {
                public void run() {
                    String tmp;
                    try {
                        while((tmp = console.readLine()) != null) {
                            out.print(tmp);
                        }
                    } catch(IOException e) {
                        e.printStackTrace();
                    }
                }
            };

            input.start();
            output.start();
            while(true) {
                if(!input.isAlive() && !output.isAlive()) {
                    client.close();
                    in.close();
                    console.close();
                    out.close();
                    break;
                }
            }
        } catch (IOException e) {   
            e.printStackTrace();
        }
    }
}

server.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
    private static ServerSocket serverSocket;
    private static Socket server;
    private static BufferedReader in, console;
    private static PrintWriter out;
    private static int port;
    public static void main(String[] args) {

        try {
            console = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Open server on port (example 1234): ");
            port = Integer.parseInt(console.readLine());
            System.out.println("Server open");
            serverSocket = new ServerSocket(port);
            System.out.println("Waiting for a client to connect...n");
            server = serverSocket.accept();
            System.out.println("Client " + server.getRemoteSocketAddress() + " connected!");
            in = new BufferedReader(new InputStreamReader(server.getInputStream()));
            out = new PrintWriter(server.getOutputStream(), true);
            Thread input = new Thread() {
                public void run() {
                    String tmp;
                    try {
                        while((tmp = in.readLine()) != null) {
                            System.out.println("Client: " + tmp);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            Thread output = new Thread() {
                public void run() {
                    String tmp;
                    try {
                        while((tmp = console.readLine()) != null) {
                            out.print(tmp);
                        }
                    } catch(IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            input.start();
            output.start();
            while(true) {
                if(!input.isAlive() && !output.isAlive()) {
                    serverSocket.close();
                    server.close();
                    in.close();
                    console.close();
                    out.close();
                    break;
                }
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

您正在阅读行,但您不是扭曲线。而不是out.write()out.print(),您应该使用out.println()