2014-02-13 2 views
0

У меня есть плата, использующая коммуникацию по Modbus, и я хочу создать соединение с Android-смартфоном. В библиотеке jamod он не создает соединение, поэтому я использовал стандартный сокет tcp. Таким образом, я мог бы создать соединение, и я могу отправить массив байтов на доску. Проблема возникает, когда я хочу прочитать ответ на доску.Android - Чтение массива сокетов tcp

Это код:

byte[] asdo = {(byte)0x01, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0xff, (byte)0xff}; 

DataOutputStream scrittura = new DataOutputStream(socket.getOutputStream()); 

scrittura.flush(); 

scrittura.write(asdo); 

scrittura.flush(); 

Этот код в потоке, который я называю на основной. Ответ платы - это байтовый массив, такой как «asdo» с шестью шестнадцатеричными байтами.

Как я могу прочитать ответ и преобразовать его в строку, чтобы я мог читать?

Спасибо!

ответ

2

Поскольку у вас есть данные (массив), есть простой способ считывания данных непосредственно в byte[].

InputStream stream = socket.getInputStream(); 
byte[] data = new byte[30]; 
int count = stream.read(data); 

Это прочитало бы это сразу и вернет количество вхождений.

+0

Проблема с этим методом заключается в том, что я получаю странный ответ, а не то, что я ожидаю, и что я могу видеть на терминале. – Kerberos

+0

Вы проверили, действительно ли эти данные отправляются * правильно *? – nKn

+0

Да, у меня есть журнал на компьютере, который читает правильный массив. – Kerberos

2

Если вы знаете размер ожидаемого ответа заранее, вы должны использовать DataInputStream.readFully(); иначе DataInputStream.read(byte[]),, который вернет вам количество фактически прочитанных байтов.

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