【问题标题】:Server doesn't receive more messages from client服务器没有收到来自客户端的更多消息
【发布时间】:2016-02-25 14:40:09
【问题描述】:

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

服务器读取线程

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");
    }
}

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

【问题讨论】:

    标签: java sockets objectinputstream objectoutputstream


    【解决方案1】:

    您的代码没有循环。

    所以它接收到第一个名为contents 的数组然后退出。

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

    while (true) {
        // Receive messages
    }
    

    【讨论】:

      【解决方案2】:

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

      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 变量,可以设置为从其他线程发出程序应该停止的信号。或者你可以中断线程。另外,准备让用户配置套接字超时。

      【讨论】:

      • String[] contents = (String[]) ois.readObject(); 为什么这个数组没有更新?我从 ois.readObject() 方法接收更新的内容,但数组包含旧内容。
      猜你喜欢
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      相关资源
      最近更新 更多