2016-05-16 36 views
0

我想要完成的是让客户端通过套接字发送字符串和数据结构,并获取服务器读取并处理它。C#通过套接字发送混合数据

例如:客户端发送一个字符串“保存”后跟一个JSON,服务器应解析第一个字符串,然后再决定采取相应的行动(在这种情况下,应该反序列化JSON,并保存到某个地方)

我在想什么:服务器可以将输入数据到8个字节的块

byte[] buffernew = new byte[8]; 

读取包含只有字符串,然后deseria第一小盘在下一个字节块中使用任何对象。 (我还应该考虑最后一个8字节块来告诉通信结束了吗?例如是一个经典字符串?)

这是一个可行的解决方案吗?有没有更好的办法?

任何人都可以提供服务器端解决方案的草图?

+0

连接的接收端需要知道每个数据项(S)结束。因此,您可以使用以下一项或多项1)Ascii:以已知字符终止2)Ascii或Binary:在数据项开始处添加一个字节计数3)Ascii或二进制:固定长度数据项。你不能发送c#中的类,因此你可以将字符串转换为字节[]并以'\ 0'结尾。结构可以是固定的或可变的大小。一个固定大小的结构可以很容易地发送。一个可变大小的结构,每个数据项必须以上述3种方法之一结束。 – jdweng

+0

添加字节计数看起来不错,但是如何获取计数并使用它来分割字节输入流中的信息? – SOROMEED

+0

如果字节数是字符串+结构的总和,并且用'\ 0'结束字符串,则可以得到字符串的长度。结构是总长度 - 字符串长度。每个项目都需要一个确定可以从以前的数据中获得的开始位置和结束位置的特定方法。 整体总是等于碎片的总和。 – jdweng

回答

0

如果我的C#代码与我的C#代码交谈,我使用BinaryWriter和BinaryReader。这些将很好地处理基本数据类型在线路上和线外的编组。所以,做

var bw = new BinaryWriter(stream, false); 
bw.Write("save"); 
bw.Write(json); 

另一端

var br = new BinaryReader(stream , false); 
var cmd = br.ReadString(); 
var json = br.ReadString(); 

它将处理分块给你

+0

感谢您的贡献,但客户端可以使用任何其他语言(前提是可以序列化JSON或其他数据结构) – SOROMEED