gpt4 book ai didi

c# TCP 服务器接受文本和二进制

转载 作者:可可西里 更新时间:2023-11-01 02:57:50 24 4
gpt4 key购买 nike

我用 C# 编写了一个简单的 TCP 服务器。它旨在接收来自客户端的命令(然后将它们传递给进一步处理)。这些命令及其参数是文本。 (这意味着客户端对文本命令进行编码,然后服务器将它们解码回文本以进行解释。)

其中一些命令将二进制文件(例如 ZIP 文件)作为参数。

现在我不知道如何在服务器端区分文本和二进制数据。无论如何,服务器只接收二进制数据,其中一些要解码为文本,有些则不是。我如何确定哪个是哪个?

我想我必须定义某种协议(protocol)。但是,我真的不知道该怎么做。

提前感谢您的任何建议和提示!

克里斯。

最佳答案

是的,您需要一个协议(protocol)。 TCP 只是一个基本的字节流,除此之外的任何东西都需要应用程序协议(protocol)(正如您在将该字节流解释为单独的文本消息时隐式完成的那样)。

混合文本和二进制数据总是很棘手。首先,文本可怕地复杂 - 大多数应用程序协议(protocol)通过假设任何重要文本为 ASCII 来解决这个问题。但是,如果您坚持使用 ASCII,很多事情都会变得容易得多。

假设您发送由 \r 分隔的命令。要解析命令,您需要读取到第一个 \r,然后解析您收到的文本命令。现在,当您知道命令 是什么 时,您就可以处理后面的数据了 - 这样您就可以拥有一个像 SENDFILE 这样的命令,它的参数是文件,所以服务器知道在它自己读取命令后,它应该将下一个 length 字节解释为正在发送的文件。

设计协议(protocol)有很多微妙之处,而且 TCP 本身也不是很容易做好。我强烈建议使用更高级别的通信协议(protocol),例如 WCF。如果您必须使用原始 TCP,您需要进行大量研究,并进行大量试验和错误:)

关于c# TCP 服务器接受文本和二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39123504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com