服务器不会从客户端收到更多消息

时间:2016-02-25 06:33:37

标签: java sockets objectinputstream objectoutputstream

我正在创建一个聊天应用程序。客户端向服务器发送消息,服务器只接收第一条消息但不是更多消息。

服务器阅读线程

private void read(ObjectInputStream ois) {
    new Thread() {
        @Override
        public void run() {
            try {
                String[] contents = (String[]) ois.readObject();
                MainContainer.gh.add(new JLabel(contents[0] + " : " + contents[1]));
            } catch (Exception ex) {
                System.out.println("Sorry.");
            }
        }
    }.start();
}

客户端编写方法

public void write(String[] contents) {
    try {
        oos.writeObject(contents);
    } catch (Exception ex) {
        System.out.println("Sorry");
    }
}

提前致谢。如果您需要额外的代码,您可以要求。感谢。

2 个答案:

答案 0 :(得分:1)

您的代码没有循环。

因此它接收名为contents的第一个数组,然后退出。

你应该添加一个类似于这个的循环

while (true) {
    // Receive messages
}

答案 1 :(得分:1)

服务器代码必须在循环中运行。从内存中,服务器线程应该像这样运行

while (running) {
  // block until next request
  Socket socket = serverSocket.accept();
  InputStream in = socket.getInputStream();
  OutputStream out = socket.getOutputStream();
  // Read from in. Write to out. Your code here...
}

running通常是一个volatile变量,可以设置为从程序应该停止的其他线程发出信号。或者你可以打断线程。另外,准备让用户配置套接字超时。