2009-03-24 3 views
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(); 
    } 
} 



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

ответ

2

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

1

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

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