Предоставление функции другим процессам - PullRequest
0 голосов
/ 24 марта 2009

Я использую этот фрагмент кода, который предоставляет простую функцию с использованием сокета:

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



Что я делаю неправильно? регистрация показывает, что он застревает во входной линии приема и иногда выдает исключение, говорящее о том, что сокет используется

Ответы [ 2 ]

3 голосов
/ 24 марта 2009

Для начала, вы создаете ServerSocket [i] внутри [/ i] цикла, что явно не то, что вам нужно. Вы хотите создать его только один раз, а затем иметь цикл, который постоянно читает данные из сокетов.

2 голосов
/ 24 марта 2009

readLine () застревает, потому что вы забыли очистить поток вывода отправителя (другой процесс).

При работе с сокетами компьютер буферизует некоторые данные (обычно 4 КБ), поскольку отправка небольших объемов данных по сети обходится дорого. Поэтому, если у вас меньше данных, вы должны указать «отправить сейчас».

...