Персонажи отсутствуют - PullRequest
2 голосов
/ 04 мая 2011

Я пытаюсь отправить запрос JSON на удаленное устройство, которое затем возвращает ответ JSON.

Я использовал следующий код:

TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse("someip"), someport);
NetworkStream stream = client.GetStream();
byte[] myWriteBuffer = Encoding.ASCII.GetBytes("some JSON");
stream.Write(myWriteBuffer, 0, myWriteBuffer.Length);
BinaryReader r = new BinaryReader(stream);
Console.WriteLine(r.ReadString())

Этот код успешноотправляет строку JSON, получает ответ, но этот ответ показывает только 123 символа, что означает, что он обрезает некоторые символы ...

Что я делаю не так

Ответы [ 2 ]

4 голосов
/ 04 мая 2011

BinaryReader / BinaryWriter не обязательно являются подходящими инструментами для записи в произвольный поток;в частности, они выбирают конкретный способ кодирования строк с префиксом длины.Если это не то, что ожидает ваше удаленное устройство, оно выйдет из строя.

Я бы просто использовал Stream напрямую, с Read и Write.

В частности, { равно 123 в ASCII, поэтому, похоже, BinaryReader неправильно берет "длину" из открывающей скобки JSON.

0 голосов
/ 04 мая 2011

Возможно, проблема с кодированием / декодированием, я бы изменил ваш код следующим образом

TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse("someip"), someport);
NetworkStream stream = client.GetStream();
byte[] myWriteBuffer = Encoding.ASCII.GetBytes("some JSON");
stream.Write(myWriteBuffer, 0, myWriteBuffer.Length);

byte[] readBuffer = stream.GetBuffer();
Console.WriteLine(Encoding.ASCII.GetString(bytes));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...