2017-01-10 3 views
-1

Я сделал сценарий для обмена данными между клиентом и сервером с сокетом на конкретном порту. Для того, я ожидал:Сокет не промывает данные

  • Сервер прослушивает

  • клиент открывает сокет

  • akwnoledges сервера, послав Int -> никогда не получали!

Я просто заметил, что мой клиент получает ИНТ , когда я бросить курить сервер зверски

Вот мой (простой) код. Клиент:

Socket socket = new Socket(SERVER_ADDR, PORT); 
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream()); 
DataInputStream dIn = new DataInputStream(socket.getInputStream()); 

Log.v("[DEBUG]", "waiting aknowledgement"); 
status = dIn.readInt(); //<-- BLOCKS HERE 
Log.v("[DEBUG]", "ack"); //<-- RECEIVED WHEN SERVER IS EXITED 

Сервер:

try { 

    DataInputStream stdIn = new DataInputStream(client.getInputStream()); 
    DataOutputStream stdOut = new DataOutputStream(client.getOutputStream()); 

    while (incoming) { 

     stdOut.writeInt(1); 
     stdOut.flush(); 

     System.out.println("Waiting..."); 
     var_from_client = stdIn.readInt(); //<-- BLOCKS HERE (BECAUSE CLIENT IS BLOCKED) 

     // ... 
    } 
} catch (Exception e) {} 

Как объяснить эту ошибку?

ответ

0

«Сокет, не промывающий данные», не имеет никакого отношения к нему. Это тупик ,, вызванный ошибкой в ​​вашем приложении.

  1. Ваш сервер отправляет int.
  2. Ваш клиент получает int.
  3. Ваш сервер блокирует попытку чтения другого int.
  4. Ваш клиент не отправляет int.
  5. Сервер никогда не может отправить другой int, потому что он заблокирован, ожидая несуществующего ответа int.
  6. Ваш клиент блокируется при попытке получить другой int, поскольку сервер заблокирован от его отправки.

Решение: отправить int с клиента.

Примечание:

  1. Промывка выходного потока сокет ничего не делает, и ни один не делает промывание в DataOutputStream обернутый непосредственно вокруг него.
  2. НИКОГДА игнорировать исключения.
+0

См. Http://stackoverflow.com/questions/41685367/send-data-from-android-mobile-to-java-server?noredirect1_comment70569691_41685367. Я не проигнорировал исключение, и я правильно отправил свои данные. С уважением – Anduriel

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