Tcp输出/输入不起作用

时间:2015-09-03 11:30:53

标签: java tcp server client

我正在尝试更改我的游戏以使用TCP,但我甚至无法让它工作。 客户端与服务器成功连接,但由于某种原因,我不能 从服务器接收消息或从客户端接收消息。我的猜测是我输出/输入有问题吗?

这是服务器代码:

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”时调用该类,它们都使用相同的类

public void sendTCPMessage(String message) {
    try {
        output.writeBytes(message);
        output.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

  • 如果要读取行,则必须写行。
  • 如果您想使用BufferedReader,阅读,则应使用BufferedWriter.
  • 进行撰写
  • 如果您想使用DataOutputStream进行书写,请阅读DataInputStream.