.Net使用Chr()来解析文本

时间:2010-03-07 13:24:09

标签: .net encoding utf-8 networkstream chr

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

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

我需要发送的字段包括:名称,文本,时间戳等。我使用ASCII字符29将它们分开。

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

数据采用UTF8编码..

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

更新

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

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

2 个答案:

答案 0 :(得分:7)

我没有分隔文本,而是发现很多对单个邮件的长度前缀更简单 - 所以而不是写

message [TERMINATOR]

你要写

[LENGTH] message

(以二进制形式发送长度,而不是文本 - 要么是固定长度的数字,例如4个字节,要么是可变长度的数字,如果你愿意牺牲简单性以便稍微减少传输数据的大小。)

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

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

答案 1 :(得分:0)

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

The Code Project中我找到了一个包含源代码的小例子。