2016-03-24 2 views
0

У меня есть C# Сервер и этот клиент Java в Android Studio:гнездо не получает никаких данных

@Override 
    public void run() { 

     try { 
      Socket socket = new Socket("192.168.0.107", 7778); 
      BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

      while (true) { 
       currentMessage = inFromServer.readLine(); 
       System.out.println(currentMessage); 

       Thread.sleep(200); 
      } 
     } 
     catch(Exception e) { 
      System.out.print("Error: " + e.toString() + "\n"); 
     } 
    } 

Я проверил сервера с Telnet и сообщения идущая, как они должны, так что им почти наверняка , что проблема где-то в клиентском коде. Я также пытался использовать DataInputStream вместо BufferedReader, но он дает мне те же результаты. Кроме того, я не получаю никаких исключений.

У меня есть эти разрешения в моем AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
+0

Ваш код андроид не принимает сообщений? – ELITE

+0

«это дает мне те же результаты» - Каковы результаты? – f1sh

+1

Является ли сервер добавлением новой строки ('\ n') в конце сообщения? – Titus

ответ

3

readLine() блоки до тех пор, пока не будет сплошная линия (прекращено любым из \r\n или \n), полученной в базовом буфере (или конец пары имеет был достигнут). Поэтому, если ваш сервер не завершает данные с помощью строки, ваша программа ничего не печатает. За исключением исключения, когда сокет время, конечно.

+0

Спасибо! Теперь он работает отлично, никогда бы не подумал об этом. – nulldozer

+0

Изменение того, что отправляет сервер, обычно является неправильным способом. Вы также можете читать из сокета, не дожидаясь символа новой строки. – f1sh

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