2011-05-04 89 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大括號中取得「長度」。