我有一个客户端-服务器项目,通过来自客户端和服务器的 UDP 传递字符串,反之亦然。我想在服务器之间将无限长度的字符串传递给客户端,我想到了一个解决方案,在该解决方案中,服务器ETX
在 buffer[strlen(buffer)+1] 处放置一个 char 以指示客户端还有更多缓冲区要来,并且客户端不需要关闭连接并等待更多数据到来。
- 设计这样的机制是个好主意吗?
- 有没有更好的解决方案(我想避免声明 的约定)
- 如果需要打印它
C#
/将如何java
处理char ?ETX
如果你想传递一个无界的字符串,我认为 UDP 不是最好的协议。使用 UDP 套接字,您可以多次获取一个包,无论是乱序还是根本没有。对于一个字符串,您很可能希望使用 TCP 套接字。
如果要使用特殊字符,则必须确保在实际字符串数据中永远不会使用此字符。或者如果可以使用,您必须在发送方以某种方式对其进行屏蔽,然后在接收方将其取消屏蔽,这意味着您有某种协议。如果您知道,在发送方,字符串有多长,可能更容易先发送长度,然后发送字符串本身。或者您可以在完成后简单地关闭连接。取决于你实际想要达到的目标。
像这样设计它是个好主意吗?
这取决于。你说你想使用UDP。您将如何处理丢失或乱序接收的数据包?
有没有更好的解决方案(我想避免声明 的约定)
如果要发送连续流,则使用 TCP 会更容易。
如果需要打印 ETX char,C#/java 将如何处理它?
他们几乎肯定会将其打印为控制字符。例如,它可以显示为空白或正方形。