2014-01-06 3 views
-1

Сервер принимает несколько соединений с помощью потоков.Простая программа связи сокетов не работает вообще

Сервер:

@Override 
public void run() { 
    try { 
     System.out.println(client); 
     System.out.println("Client Connected"); 
     //So far, so good. Client is connected 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(this.client.getInputStream())); 
     System.out.println(in.readLine()); 
     // Nothing happens 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

Клиент:

try { 
     PrintWriter out = new PrintWriter(Client.socket.getOutputStream()); 
     BufferedReader in = new BufferedReader (
       new InputStreamReader(Client.socket.getInputStream())); 

     out.write("Information sent from client"); 
     // Does not work 
     in.read(); 
     // Before this .read it would give a "Connection reset" probably 
     // Because the client closed before the server could even read 
    } 

Нет ошибок, но он просто висит, ничего не отправляется. Брандмауэр отключен, поэтому этого не может быть. Также он работал вчера. Я понятия не имею, что я мог испортить.

+0

Пробовал ли вы использовать net cat для замены клиента и сервера отдельно, чтобы увидеть, что работает? – 735Tesla

+0

'readline()' полагается на новую строку, согласно документам. Вы не отправляете его, чтобы он не блокировал и никогда не возвращался. –

ответ

2

write пишет содержание только до InputStream. Используйте println, чтобы отправить дополнительный символ новой строки в соответствие с оператором readLine на сервере.

out.println("Information sent from client"); 
+0

О, так что символ новой строки означает, что сервер просто ждет, пока не появится (что никогда не будет)? Спасибо. Работает. – Kalec

Смежные вопросы