2015-10-08 6 views
-1

Я пытаюсь написать некоторую строку (как ascii), используя сетевой поток (tcp/ssl) для сервера, то есть локальное приложение консоли C#. Код выглядит следующим образом:Отправка байтов по сети на устройстве

public void SendMessage(String message) throws IOException { 
    OutputStream stream = client.getOutputStream(); 
    // message is a String of 27 characters. 
    stream.write(message.getBytes("US-ASCII"), 0, message.getBytes("US-ASCII").length); 
    stream.flush(); 
} 

Это прекрасно работает на эмуляторе, однако, когда я запускаю приложение на устройстве (Galaxy A5 на Lolipop 5.0.2), он посылает только один байт. В чем проблема?

Мой приемный код на стороне сервера, я первый пытаюсь прочитать первые четыре байта (C#):

var messageData = new StringBuilder(); 
var buffer = new byte[4]; 
var bytes = sslStream.Read(buffer, 0, 4); 
var len = Encoding.ASCII.GetString(buffer); 
var chars = new char[Encoding.ASCII.GetCharCount(buffer, 0, bytes)]; 
// Use Decoder class to convert from bytes to ACII 
// in case a character spans two buffers. 
Encoding.ASCII.GetChars(buffer, 0, bytes, chars, 0); 
messageData.Append(chars); 
+0

Попробуйте использовать 'Writer', но, пожалуйста, используйте тот же самый для жизни сокета. Трудно поверить, что он отправляет только один байт, если сообщение не является только одним байтом. Рассматривали ли вы вероятность того, что проблема находится на момент получения? – EJP

+0

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

+0

Итак? TCP имеет право доставлять по одному байту за раз. Вы должны зациклиться. Вы должны будете отправить свой код приема. – EJP

ответ

0

Попробуйте использовать Standart StandardCharsets.US_ASCII вместо жесткого кодированной строки, которая всегда плохо идея.

yourString.getBytes (StandardCharsets.US_ASCII);

+0

Я пробовал это, это то же поведение. – Brght

+0

Почему я получил -1 для этого вопроса, потому что у меня нет ответа? – Brght

+0

@Brght Почему вы получили -1 для этого вопроса, не имеет ничего общего с этим ответом. У вас есть-1 от меня, потому что ваш вопрос еще не имеет смысла, несмотря на несколько попыток с моей стороны, чтобы вы разъяснили его. – EJP

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