2016-01-21 40 views
0

我想通过c#(xamarin)中的套接字连接来回发送JSON字符串。如何从套接字接收JSON字符串

我想知道,接收器如何知道从套接字读取多少字节以接收完整的JSON字符串,因为字符串的大小会有所不同。

我必须先发送一个二进制长度(可能是一个或两个字节),然后JSON字符串?这样做的标准方法是什么,以便接收者知道每次获取完整的JSON字符串时要从套接字读取多少个字节。

它必须知道每个字符串有多少个字节,因为每个字符串都是一个单独的数据包,并且如果有很多数据包是背靠背发送的,如果每个字符串的长度都不准确,它会读取超过一个字符串和另一个的开始,或者不读取整个字符串,无论哪种方式,它将在解码格式错误的字符串时崩溃。

另一个问题是,如果我首先发送二进制的长度,那么如果发生什么事情发生在接收器与发送者不同步的地方,那么它不会知道哪个字节是长度了,因为它不能告诉字符串的起始位置,并且哪些输入数据代表长度,它将只收到一堆字节,并且它不会知道从哪里开始的末端等。

任何人都知道正确的方法来执行它,而无需编写兆字节的代码?

感谢

回答

0

如果它是一个基于字符串的消息(如你所提到的JSON),你可以使用一个StringBuilderCONCAT你收到的每个数据包,并在每个检查收到的文件结束标签的步骤(由您自己定义,例如<EOF>)。

这里是关于MSDN

ClientServer实现的示例:客户端发送与<EOF>标签和服务器检查结束消息它,以确保完成的每个消息。