如何从套接字接收 JSON 字符串
本文关键字:JSON 字符串 套接字 | 更新日期: 2023-09-27 18:31:26
我想通过 c# (xamarin) 中的套接字连接来回发送 JSON 字符串。
我想知道,接收方如何知道从套接字读取多少字节才能接收完整的 JSON 字符串,因为字符串的大小会有所不同。
我是否必须首先以二进制(可能是一个或两个字节)发送长度,然后发送 JSON 字符串?这样做的标准方法是什么,以便接收方知道每次获得完整的 JSON 字符串时要从套接字读取多少字节。
它必须知道每个字符串有多少字节,因为每个字符串都是一个单独的数据包,如果背靠背发送许多数据包,如果每个字符串的长度不确切,它将读取一个字符串的末尾并进入另一个字符串的开头,或者不读取整个字符串, 无论哪种方式,它都会在解码格式错误的字符串时崩溃。
另一个问题,如果我首先以二进制发送长度,那么如果发生任何事情,接收方与发送方不同步,那么它将不再知道哪个字节是长度,因为它无法分辨字符串从哪里开始,哪些传入数据代表长度,它只会接收一堆字节,它不会知道从哪里开始结束等。
有人知道在不编写兆字节代码的情况下做到这一点的正确方法吗?
谢谢
如果它是一个基于字符串的消息(正如你提到的 JSON),你可以使用StringBuilder
来连接你收到的每个数据包,并在每个接收步骤中检查文件结束标签(由你自己定义,例如 <EOF>
)。
下面是 MSDN 上的一个示例
客户端和服务器实现:客户端发送以 <EOF>
标记结尾的消息,服务器会对其进行检查以确保每条消息都已完成。