gpt4 book ai didi

c# - TCP 客户端问题

转载 作者:行者123 更新时间:2023-11-30 21:04:27 26 4
gpt4 key购买 nike

我在 C# 中返回 TCP 客户端应用程序时遇到了一个大问题。正常情况下它工作正常但在某些情况下服务器向特定客户端发送同时响应,因此这种情况下所有同时响应都作为单个消息在客户端接收。因此这种情况下客户端无法识别单个消息。因此,在这种情况下,我的客户端应用程序无法处理特定事件。是否可以在客户端读取单个消息?所以为了解决这个问题,我有一些选择,但我不知道这是否是正确的方法。

1- 在客户端使用固定长度的缓冲区(但我的消息是可变长度的)。

2- 为每个响应消息添加一个分隔符。

如果有人知道解决此类问题的方法,请帮助我。

最佳答案

TCP 是基于流的,您可以从客户端到服务器获取数据流。如果您不能构建一个应用程序协议(protocol)来确保单独发送每条消息(这对于 TCP 来说通常不是一个明智的想法),则您需要“反序列化”您对流的期望。

因此,您需要在每条消息中发送一些内容,以便您区分数据是什么。这通常通过在每条消息的开头使用标记或类型数据来完成。有时一个字节就可以了(取决于你有多少种不同的消息类型)。然后您从流中读取该字节并决定接下来要反序列化的内容。例如如果你想发送一个字符串,你可以序列化'1',然后是string。如果您想发送日期/时间,您可以序列化“2”然后是 DateTime。在服务器上,如果这两个对象大约同时发送,您可以简单地反序列化 byte,如果它是“1”,则反序列化 string,然后继续反序列化:获取下一个 byte,如果它是 '2',则反序列化一个 DateTime

重要的是要记住 TCP 是基于流的协议(protocol),而不是基于消息的协议(protocol)。基于消息的需要在应用程序级别实现——例如类似上面的内容。

“序列化”和“反序列化”是指典型的内置序列化器和反序列化器,如 Serializing Objects 中所述。在 .NET 文档中。这同样适用于 JSON.NET 或内置 DataContractJsonSerializerJavaScriptSerializer 等库中包含的 JSON 序列化程序。

关于c# - TCP 客户端问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352125/

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