【发布时间】:2016-10-24 04:16:14
【问题描述】:
我想通过 networkstream 发送字符串 json。客户端代码
using (var ns = new NetworkStream(socket))
{
string json = JsonConvert.SerializeObject(listCfile, Formatting.Indented);
byte[] jsonbytes = Encoding.UTF8.GetBytes(json);
byte[] jsonLength = BitConverter.GetBytes(jsonbytes.Length);
ns.Write(jsonLength, 0, jsonLength.Length);
ns.Write(jsonbytes, 0, jsonbytes.Length);
}
jsonbytes 为字节[988324]
在服务器端
using (var ns = new NetworkStream(socket))
{
byte[] byDataLength = new byte[4];
ns.Read(byDataLength, 0, 4);
int jsonLength = BitConverter.ToInt32(byDataLength, 0);
byte[] byData = new byte[jsonLength];
ns.Read(byData, 0, jsonLength);
File.WriteAllBytes("E:\\json.txt",byData);
}
byData 为字节[988324]
但我收到的 byData 与我发送的 jsonbytes 不同。
我需要一些帮助。
更新!有时它会起作用。收到的 ByData 与我发送的 jsonbytes 相同 有时它不起作用:(
【问题讨论】:
-
“它丢失了一些数据”不是对问题的有用描述。请详细说明。
-
从客户端是jsonLength在实际数据之前发送,在服务器端建一个缓冲区来接收json数据?
-
@nura 我和你的想法一样,但我是 c# 和编码的初学者,所以你可以给我一些例子,非常感谢。
-
双方都使用 C# 吗?建筑学怎么样?客户端是手机吗?
-
NetworkStream.Read: "Read 操作读取尽可能多的可用数据,不超过 size 参数指定的字节数"。您忽略了来自
Read的返回值,它告诉您被读取了多少字节。不能保证一侧对Write的调用与另一侧对Read的调用1-1 匹配。 TCP 是字节流。不是消息。
标签: c# sockets networkstream