2012-05-18 3 views
3

Итак, у меня есть клиент TCP, работающий на планшете Androidt, и у меня есть сервер C++, работающий на ПК.TCP-клиент не может читать данные с сервера

Я отправляю данные со своего планшета на ПК, и ПК может их читать очень хорошо, но когда ПК пытается отправить сообщение на планшет, планшет просто ничего не получает. Он застревает в вызове readLine(), пытаясь что-то прочитать.

Так вот методы ява отправки, а затем ждет ответа

@Override 
protected Void doInBackground(Void... arg0) 
{ 
    String msg = ""; 
    Socket socket = null; 
    DataOutputStream outToServer = null; 
    BufferedReader msgFromServer = null; 
    try 
    { 
     // Socket used for I/O with the server 
     socket = new Socket("192.168.20.100", 48501); 

     // Writing to the server 
     outToServer = new DataOutputStream(socket.getOutputStream()); 

     // Reading from the server 
     msgFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     DataInputStream iStrReader = new DataInputStream(socket.getInputStream()); 

     // Initial comm 
     outToServer.writeBytes("MainCamConnect"); 

     msg = msgFromServer.readLine(); // Get stuck here 
     Log.d("NETWORK", msg); 

     socket.close(); 

    } 
    catch(UnknownHostException e) 
    { 
     e.printStackTrace(); 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 

    return(null); 
} 

и сообщение я посылаю с ПК заключается в следующем: «StartDelayTest \ п»

Я знаю, что сервер может послать сообщение просто отлично, потому что я проверил это с помощью простого C++ TCP клиент и он работал нормально, но когда я запускаю его на таблетки, таблетки не могут получить что-нибудь

EDIT:

ОС: Windows 7 64 бита Профессиональная версия

EDIT 2:

Я запустить Wireshark на моем компьютере, и я могу подтвердить, что пакеты посылаются на правильный адрес IP, так что проблема действительно в принимающая сторона (андроид приложение)

+0

Операционная система на ПК? – Tudor

+0

Windows 7 64 бит Профессиональная версия – nevero

+1

Возможно, вы захотите попробовать прочитать необработанные байты из сокета inputStream и/или прочитать таким образом, чтобы не дождаться получения '' \ n'', поскольку поведение, которое вы упоминаете звучит как проблема с кодировкой. –

ответ

0

Я хотел бы попробовать использовать общественный int read(char[] cbuf, int off, int len) вместо так что ваш код будет что-то вроде:

char[] buffer = new char[256]; 
int count = read(buffer, 0, 256); 

Readline для сетевых буферов не используется очень часто в типичном клиенте серв er.

+0

Я попробовал, но не изменил результат. – nevero

+0

Попробуйте изменить буфер на один символ. Посмотрите, что это ничего не изменит. –

0

Вы читаете строки, но не пишете их. writeBytes() просто записывает эти байты. Линии заканчиваются новой строкой. readLine() будет блокироваться до тех пор, пока не получит его.

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