我正在尝试使用C#建立网络,我正在尝试创建一种干净的方式来发送我的数据包,现在虽然我不会担心所有的包含在特殊字符中的数据包我正在阅读的东西,而不是数据包是专用于传递给客户端的数据前面的三位数字。例如,数据字符串可能如下。
LoginPacket是数据包000。
LoginPacket数据将是“000Username~Password”
我试图清理它,所以我可以用更干净的方式写东西,尝试这样的事情
SendPacket(000, new string { "data", "parameters" });
但是,发送整数000会立即转换为零。
有没有解决方法,或者我最好将它们全部存储在字符串中,例如
SendPacket(new string { "000", "data", "params" } );
答案 0 :(得分:0)
将数字转换为文本时,需要指定位数。数字000
和0
均为零。但是字符串" 000
"和" 0
"是不同的字符串。
使用
n.ToString("000");
确保您获得三位数。
答案 1 :(得分:0)
我建议你使用命令类型,然后是长度,然后是 Payload
然后你的有效载荷可以是类似的结构..所以login命令(0)将使用一个结构,该结构以长度字节开头,后跟用户名,后跟第二个长度字节,最后是密码。
例如:
0155Dan-o8password
请记住,这一切都以字节数组的形式出现在线上。所以你读取前4个字节(Int32,Command Type)
然后读取下一个Int32来计算有效载荷的长度..这是你在第三次读取时读取的字节数。
现在你知道Command是登录的,你可以实现特定于登录的阅读。
此外,我建议您创建一些扩展方法,以使这更容易。 喜欢: Stream.ReadByte , Stream.ReadInt32 , Stream.ReadInt64 , Stream.ReadString(length)
然后是一些特定于应用程序的扩展程序..例如 Stream.ReadLogin