如何从套接字

时间:2016-01-21 23:31:52

标签: c# json string sockets

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

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

我是否必须首先以二进制(可能是一个或两个字节)发送长度,然后是JSON字符串?执行此操作的标准方法是什么,以便接收方知道每次获取完整的JSON字符串时从套接字读取的字节数。

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

另一个问题,如果我首先以二进制形式发送长度,那么如果接收器与发送方不同步时会发生任何事情,那么它不再知道哪个字节是长度,因为它无法告诉字符串的起始位置,哪些传入数据代表长度,它只会收到一堆字节,而且它不会知道从哪里开始等等。

如果没有编写兆字节代码,任何人都知道正确的方法吗?

由于

1 个答案:

答案 0 :(得分:0)

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

以下是MSDN上的示例

ClientServer实现:客户端发送以<EOF>标记结尾的消息,服务器检查它以确保每条消息都已完成。