Tcp output/input 不工作

Tcp output/input doesnt work

我正在尝试更改我的游戏以使用 TCP,但我什至无法让它工作。 客户端与服务器成功连接,但由于某种原因我不能 从服务器接收消息,也不从客户端接收消息。我的猜测是我对 output/input?

做错了什么

这是服务器代码:

public class Server implements Runnable {
    Server() {
        serverSocket = new ServerSocket(1919, 300);
    }

    run() {
        while (true) {
            String message = "blank";
            try {

                //w8ting for some connection
                tcpSOCKET = tcpServer.accept(null);
                //Connected to some1!
                input = new BufferedReader(new InputStreamReader(
                        tcpSOCKET.getInputStream()));
                output = new DataOutputStream(
                        tcpSOCKET.getOutputStream());
                output.flush();

                //TODO PROBLEM it stays here trying to read line but even if the  client send a message it wont move on
                message = input.readLine();
                main.addLabel(Color.BLUE, message);

            } catch (EOFException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

这是客户:

public class Client implements Runnable {

    Client() { }

    run() {
        String message = "";
        try {
            tcpSOCKET = new Socket(serverIp, serverTCPport);
            input = new BufferedReader(new InputStreamReader(
                    tcpSOCKET.getInputStream()));
            output = new DataOutputStream(tcpSOCKET.getOutputStream());
            output.flush();

            while (true) {
                System.out.println("w8ting for message from server");
                //TODO problem, it wont read anything even if the server send a message
                message = input.readLine();

                System.out.println("A message has arrived: " + message);
                gameScreen.serverMessage = message;
            }
        } catch (EOFException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

并且当我在服务器或客户端中点击 "s" 时调用 class,它们都使用相同的 class

public void sendTCPMessage(String message) {
    try {
        output.writeBytes(message);
        output.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  • 要读行,就得写行。
  • 如果你想用 BufferedReader, 阅读,你应该用 BufferedWriter.
  • 写作
  • 如果你想写 DataOutputStream,你应该用 DataInputStream.
  • 阅读