2013-04-28 2 views
0

У меня проблема с чтением данных из сокета. Я пытался решить мою проблему по-разному, и я думаю, что мой код сейчас является самым простым, чтобы проверить его. У Android есть проблема с чтением из сокета и остановка в этой строке (inStream.read()). Через 10 секунд (socket.setSoTimeout) у меня есть сообщение ------- error: null. Я хочу читать любые данные (0-255) или -1, но ничего не произошло. В PHP (на моем сервере, моем коде) и ПК (не в моем приложении) все в порядке. Что мне делать?Android - inputStream.read() - я ничего не читаю

Это мой первый пост, поэтому я сожалею о возможных ошибках. Спасибо за вашу помощь!

try{ 
    socket  = new Socket("192.168.0.150", 502); 
    socket.setSoTimeout(10000); 

    outStream = new DataOutputStream(socket.getOutputStream()); 
    inStream = new DataInputStream(socket.getInputStream()); 

    System.out.println("----------" + outStream); 
    System.out.println("----------" + inStream); 

    outStream.write(0x01); 
    outStream.write(0x03); 
    outStream.write(0x10); 
    outStream.write(0x00); 
    outStream.write(0x00); 
    outStream.write(0x04); 
    outStream.write(0x40); 
    outStream.write(0xC9); 

    outStream.flush(); 
    System.out.println("----------ok 1"); 

/////////////////////////////    

// Thread.sleep(50); 
    System.out.println("----------Test1: " + socket.isConnected()); 
    System.out.println("----------Test2: " + socket.isInputShutdown()); 

    int dat = inStream.read(); 
    System.out.println("----------ok2: "); 
} catch(Exception e){ 
    e.printStackTrace(); // <-- edit 
    System.out.println("----------Error: " + e.getMessage()); 
} 


------------ 

    <uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name = "android.permission.UPDATE_DEVICE_STATS" /> 
    <uses-permission android:name = "android.permission.CHANGE_WIFI_STATE" /> 
    <uses-permission android:name = "android.permission.WAKE_LOCK" /> 
    <uses-permission android:name = "android.permission.INTERNET" /> 

--edit--

Мои журналы: http://codepaste.net/eapot2

+0

Используйте e.printStackTrace(), чтобы получить осмысленный вывод, связанный с исключенным пойманным. – BobTheBuilder

+0

Я добавляю эту строку. Мои журналы: http://codepaste.net/eapot2 Если я удалю socket.setSoTimeout (10000); то Android падает (ничего не происходит) – kamil4u

ответ

-1

Изменение порта на 1024-65565. Порт 502 обычно не допускается.

+0

Но я хочу познакомиться через modbus - он находится на порту 502 (http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers). Этот порт является стандартным, поэтому я должен прочитать это. Спасибо за ответ, и я жду другого совета. – kamil4u

+0

Изменение номера порта не решит тайм-аут чтения. Не ответ. – EJP

+0

Но если я меняю порт на localhost, эта работа (используя только запись и чтение, а не modbus) – barwnikk

0

Если у вас есть тайм-аут чтения, очевидно, что ничто не посылает сверстник.

NB «ничего не происходит» - это не то же самое, что «Android падает». Не злоупотребляйте стандартной терминологией.

+0

OK. Поэтому, возможно, я должен снова написать проблему. Если я отправлю «01 03 10 00 00 04 40 C9» в PHP (как chr (hexdec (значение $) для каждого номера), у меня есть ответ. Мой код в Android ничего не делает в этой строке (ожидая ответа). не иметь тайм-аут, я могу ждать все время, но у меня нет ответа. Возможно, что это плохой способ отправить данные, но как мне это сделать? С другим устройством этот код был в порядке, и у меня есть ответное сообщение, но теперь оно может быть, я должен использовать «sleep» в программе за 50 мс, прежде чем использовать «читать»? Но Thread.sleep (50), не помогите мне. – kamil4u

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