Я пытаюсь написать некоторую строку (как 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);
Попробуйте использовать 'Writer', но, пожалуйста, используйте тот же самый для жизни сокета. Трудно поверить, что он отправляет только один байт, если сообщение не является только одним байтом. Рассматривали ли вы вероятность того, что проблема находится на момент получения? – EJP
Нет, потому что я тоже отлаживаю серверное приложение. При запуске из эмулятора для того же сообщения я получаю 4 байта, а когда на устройстве он получает один байт. – Brght
Итак? TCP имеет право доставлять по одному байту за раз. Вы должны зациклиться. Вы должны будете отправить свой код приема. – EJP