0

我正在使用这段代码,它使用套接字公开一个简单的函数:

while (true) {
  try {
    ServerSocket serverSocket = new ServerSocket(7070);
    Socket clientSocket = serverSocket.accept();
    String input = (new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))).readLine();
    synchronized (this.map) {
      ObjectOutputStream o = new ObjectOutputStream(clientSocket.getOutputStream());
      o.writeChars(map.get(input));
      o.close();
    }
    clientSocket.close();
    serverSocket.close();
  } catch(Exception e) {
    e.printStackTrace();
  }
}



我究竟做错了什么?日志显示它卡在输入接收线中,有时会抛出异常,说明套接字正在使用中

4

2 回答 2

3

对于初学者,您在循环中创建 ServerSocket [i] [i],这显然不是您想要的。您只想创建一次,然后有一个不断从套接字读取的循环。

于 2009-03-24T14:30:46.777 回答
2

readLine() 卡住了,因为您忘记刷新发送方(另一个进程)的输出流。

使用套接字时,计算机将缓冲一些数据(通常为 4KB),因为通过网络发送少量数据非常昂贵。因此,如果您的数据较少,您需要告诉它“立即发送”。

于 2009-03-24T14:50:35.373 回答