2011-05-04 72 views
2

我想发送一个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个字符,这意味着它减少了一些字符...

我在做什么错

+0

是什么反应是什么样子?在哪个角色被剪切? – 2011-05-04 08:58:34

+0

那么,回应是什么?它在哪里破坏?这可能只是一个空白/回车问题?即远程设备是否使用换行符返回JSON? – 2011-05-04 08:59:50

回答

0

可能的编码/解码的问题,我会改变你的代码,像这样

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)); 
+1

GetBuffer()仅适用于'MemoryStream';这是一个'NetworkStream'。 **最少**您需要连续的“读取”调用以获取正确的数据 – 2011-05-04 09:17:38

4

BinaryReader/BinaryWriter不一定是写入任意流合适的工具;特别是,他们选择了一种具有长度前缀的字符串编码方式。如果这不是您的远程设备所期望的,则会失败。

我只是直接使用Stream,使用ReadWrite

尤其是,{在ASCII中是123,所以看起来BinaryReader不正确地从打开的JSON大括号中取得“长度”。