如何从套接字接收 JSON 字符串

本文关键字:JSON 字符串 套接字 | 更新日期: 2023-09-27 18:31:26

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

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

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

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

另一个问题,如果我首先以二进制发送长度,那么如果发生任何事情,接收方与发送方不同步,那么它将不再知道哪个字节是长度,因为它无法分辨字符串从哪里开始,哪些传入数据代表长度,它只会接收一堆字节,它不会知道从哪里开始结束等。

有人知道在不编写兆字节代码的情况下做到这一点的正确方法吗?

谢谢

如何从套接字接收 JSON 字符串

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

下面是 MSDN 上的一个示例

客户端

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