Java ServerSocket 不会发送或接收来自客户端的消息

Java ServerSocket won't send or receive messages from client

我有这两个类Client.javaServer.java,每个都包含一个main方法。思路很简单,里面的代码也很相似。 objective 我试图实现的是打开一个 服务器 ,它使用 ServerSocket 侦听特定端口,然后打开一个 客户端 并使用 Socket 连接到服务器,以便我最终可以将消息从 client 发送到 server 并反向发送直到我关闭连接。

到目前为止,我尝试了最简单的示例,在 端口 4444 上打开了 server,然后在 same PC 我打开了一个客户端连接到 地址 127.0.0.1(本地主机),在 端口 4444 上。一切运行顺利, 每次都成功建立连接,除了它不会发送任何消息,无论是从服务器到客户端还是客户端到服务器。

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

Client.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().