Java 聊天应用程序只接收一些已发送的消息

Java chat application only picking up some sent messages

我正在编写一个一体化 java 聊天程序,它可以充当客户端或服务器。我目前遇到这个问题,在建立连接后,程序只能成功接收(或发送?)一些消息。我使用了一个循环来通过大量垃圾邮件发送垃圾邮件,并且我看到另一端只会接收一些邮件。我从来没有收到要手动发送的消息。 这是代码:

public class ConnectionThread implements Runnable {

private Connection c = Connection.getInstance();
private ChatInterface chatInterface;
private static ConnectionThread serverThread;
private ServerSocket serverSocket;
private Socket socket;
private ObjectInputStream dataIn;
private ObjectOutputStream dataOut;

public ConnectionThread() {}

public static synchronized ConnectionThread getInstance() {
    if (serverThread == null) {
        serverThread = new ConnectionThread();
    }
    return serverThread;
}

public void run() {
    // If the programs role is server, set up the server
    if (c.getRole() == ConnectionRole.SERVER) {
        try {
            setupServer();
            waitForConnection();
            setupStreams();
        } catch (IOException e) {
            e.printStackTrace();
        }
        do {
            try {
                chatInterface.addToChatHistory(dataIn.readUTF());
            } catch (IOException e) {
                e.printStackTrace();
            }
        } while (c.getRole() == ConnectionRole.SERVER);
    }
    // If the programs role is client, set up a connection to the server
    if (c.getRole() == ConnectionRole.CLIENT) {
        try {
            setupClient();
            setupStreams();
        } catch (IOException e) {
            e.printStackTrace();
        }
        do {
            try {
                chatInterface.addToChatHistory(dataIn.readUTF());
            } catch (IOException e) {
                e.printStackTrace();
            }
        } while (c.getRole() == ConnectionRole.CLIENT);
    }
}

private void setupClient() throws IOException {
    System.out.println("ATTEMPTING TO CONNECT...");
    socket = new Socket("127.0.0.1", 8080);
    System.out.println("CONNECTED!");
}

private void setupServer() throws IOException {
    System.out.println("SETTING UP SERVER..");
    serverSocket = new ServerSocket(8080, 1);
    System.out.println("SERVER SETUP");
}

private void waitForConnection() throws IOException {
    System.out.println("WAITING FOR A CONNECTION...");
    socket = serverSocket.accept();
    System.out.println("CONNECTION RECIEVED");
}

private void setupStreams() throws IOException {
    System.out.println("SETTING UP STREAMS...");
    dataOut = new ObjectOutputStream(socket.getOutputStream());
    dataIn = new ObjectInputStream(socket.getInputStream());
    chatInterface = ChatInterface.getInstance();
    System.out.println("STREAMS SETUP");
}

public void sendMessage(String message) throws IOException {
    System.out.println("SENDING MESSAGE...");
    dataOut.writeUTF(message);
    chatInterface.addToChatHistory(message);
    System.out.println("MESSAGE SENT!");
}
}

谁能告诉我为什么不是所有消息都 sent/picked 正常发送?我已经玩了很长时间了,但我不明白为什么。

我在遵循 EJP 的建议切换到 DataInput/OutputStreams 后发现,它立即起作用。虽然我确实需要使用 ObjectInput/OutputStreams 所以我切换回来了。我发现我又遇到了同样的问题,直到我切换到 write/readObject 而不是 write/readUTF。如果我将 readObject 转换为 (String),它将设法接收每条消息。 因此,如果有人在使用 write/readUTF 时遇到与 ObjectInput/OutputStreams 相同的问题,请尝试改用 write/readObject