【问题标题】:.Net using Chr() to parse text.Net 使用 Chr() 解析文本
【发布时间】:2010-03-07 13:24:08
【问题描述】:

我正在构建一个简单的客户端-服务器聊天系统。

客户端向服务器发送数据,服务器将数据重新发送给所有其他客户端。我正在使用 TcpListener 和 Network 流类在客户端和服务器之间发送数据。

我需要发送的字段有,例如:姓名、文本、时间戳等。我使用 ASCII 字符 29 将它们分开。

我还使用 ASCII 字符 30 来标记流数据的结束。

数据采用UTF8编码..

这是一个好方法吗?我会遇到问题吗?有更好的方法吗?

更新:

可能我的问题被误解了,所以我解释得更好.. 假设有一个数据列表要从客户端发送到服务器,并且假设只在一个流中发送所有数据,你如何发送这些数据?

  • 使用标记
  • 使用字符作为分隔符
  • 对每个字段使用固定长度

【问题讨论】:

    标签: .net encoding utf-8 networkstream chr


    【解决方案1】:

    我发现为单个消息添加长度前缀要简单得多,而不是分隔文本,而不是编写

    message [TERMINATOR]
    

    你会写

    [LENGTH] message
    

    (以二进制而不是文本形式发送长度 - 可以是固定长度的数字,例如 4 个字节,或者如果您愿意牺牲简单性以略微减少传输的数据大小,则可以使用可变长度的数字.)

    这样就可以轻松地从流中准确读取正确数量的数据,而不必担心会超出下一条消息。唯一的缺点是您需要在开始发送之前知道消息的长度,但我认为在这种情况下这对您来说应该不是问题。

    顺便说一下,UTF-8 是一种编码,而不是加密算法。

    【讨论】:

    • 谢谢...您对使用字符 29 分隔同一流的不同字段有何看法?
    • @Marcx:同样——我会改用长度前缀。
    【解决方案2】:

    我认为另一种选择可能是序列化/反序列化您的对象并使用.NET Remoting 发送/接收它们。您还可以在发送时加密您的对象,在接收时解密。

    The Code Project,我找到了一个带有源代码的小例子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      相关资源
      最近更新 更多