0

我有一个客户端-服务器项目,通过来自客户端和服务器的 UDP 传递字符串,反之亦然。我想在服务器之间将无限长度的字符串传递给客户端,我想到了一个解决方案,在该解决方案中,服务器ETX在 buffer[strlen(buffer)+1] 处放置一个 char 以指示客户端还有更多缓冲区要来,并且客户端不需要关闭连接并等待更多数据到来。

  1. 设计这样的机制是个好主意吗?
  2. 有没有更好的解决方案(我想避免声明 的约定)
  3. 如果需要打印它C#/将如何java处理char ?ETX

在此处输入图像描述

4

2 回答 2

1

如果你想传递一个无界的字符串,我认为 UDP 不是最好的协议。使用 UDP 套接字,您可以多次获取一个包,无论是乱序还是根本没有。对于一个字符串,您很可能希望使用 TCP 套接字。

如果要使用特殊字符,则必须确保在实际字符串数据中永远不会使用此字符。或者如果可以使用,您必须在发送方以某种方式对其进行屏蔽,然后在接收方将其取消屏蔽,这意味着您有某种协议。如果您知道,在发送方,字符串有多长,可能更容易先发送长度,然后发送字符串本身。或者您可以在完成后简单地关闭连接。取决于你实际想要达到的目标。

于 2013-06-10T10:57:44.380 回答
1

像这样设计它是个好主意吗?

这取决于。你说你想使用UDP。您将如何处理丢失或乱序接收的数据包?

有没有更好的解决方案(我想避免声明 的约定)

如果要发送连续流,则使用 TCP 会更容易。

如果需要打印 ETX char,C#/java 将如何处理它?

他们几乎肯定会将其打印为控制字符。例如,它可以显示为空白或正方形。

于 2013-06-10T10:49:09.830 回答