2015-03-13 3 views
0

У меня есть простой клиент, который я тестирую с моего устройства Android, я тестирую вызов telnet-сервера telehack.com. Проблема в том, что когда я запрашиваю определенную опцию из списка пунктов меню, данные отправляются, но не получаются. Опция advent (колоссальное приключение). Я пробовал различные реализации (socket, socketchannel и select) и по-прежнему получаю ту же проблему после отправки сообщения, данные не получены, другие параметры из меню работают нормально. Хуже всего то, что я загрузил различных клиентов telnet из игрового магазина, у них, похоже, такая же проблема. (Помимо Mobile Telnet, который, похоже, использует библиотеку сокетов NDK C++).Андроид сокет не принимает

Также поиск и Wireshare и telnet-клиент на окнах не показывают ничего необычного, когда данные отправляются обратно.

public void run() { 
    mRun = true; 

    try { 
     Socket sc = new Socket(SERVER_IP, SERVER_PORT); 
     inBuffer = new DataInputStream(sc.getInputStream()); 
     outBuffer = new DataOutputStream(sc.getOutputStream()); 

     Log.e("TCP Client", "C: Connecting..."); 

     if (mConnectionListener != null) 
      mConnectionListener.connectionStatusChanged(true); 

     sc.setSoTimeout(5*60*1000);     //Socket timeout = 4 minutes 

     sc.setTcpNoDelay(true); 
     sc.setKeepAlive(true); 

     try { 


      while (mRun) { 


       int size = inBuffer.available(); 
       if (size > 0) 
       { 


        byte[] readBuf = new byte[size]; 
        inBuffer.read(readBuf); 
+0

вы могли бы быть немного более конкретно о вашем вопросе и включают в себя весь исходный код рамки вы говорите (похоже, что это неполный). – gabriel

+0

Вы можете попробовать запустить это на эмуляторе Android и обнюхать пакет на хосте или через устройство на маршрутизаторе wifi, которое может понюхать, или через wifi-доступ к подключению Ethernet-сети вашего устройства, принюхиваемому там. –

ответ

0

Доступный метод() может дать вам желаемый результат, но это не обязательно. Некоторые потоки просто возвращают 0. Использовать постоянный размер буфера чтения вместо:

byte[] buffer = new byte[4096]; 

int bytesRead = 0; 
while ((bytesRead = in.read(buffer)) >= 0){ 
    // note that only the bytes 0 to bytesRead-1 are valid in buffer 
} 
Смежные вопросы