带有c#套接字的字符串中的奇怪字符

时间:2011-12-04 21:13:16

标签: c# string sockets character-encoding

我们正在使用XNA开发RTS游戏,我已经负责网络(好吧,我们完成了游戏,我最近选择了它)。为了减少追逐,我遇到了很多关于套接字的问题,丢失的数据包主要是出于很多不同的原因,但我认为我已经解决了大部分问题。 (我们甚至使用TCP ...)

为了尝试解决问题,我创建了一个网络测试人员,它会将数据包发送到服务器,服务器会将数据包发送回来,之后我可以看到是否有丢包等。

我的一项测试是'变形''测试。基本上我抓取随机函数,生成一个数字,将其转换为MD5字符串,然后将其发送到服务器。当我收到它时,我将它与已经发送的字符串进行比较,看看是否有任何损坏(比较应该是100%,因为在收到的列表中找到了所有发送的字符串)。

现在,这里是结果的快照:

已发送:

    [0] "69-AB-DA-CC-1A-66-6A-27-C5-B4-FF-B7-2D-9F-75-06"   string
    [1] "1C-16-68-98-DF-6C-C9-16-54-5A-94-00-CA-57-77-CC"   string
    [2] "B6-24-7E-79-0C-66-14-5B-C0-32-F5-17-06-5D-13-87"   string
    [3] "1E-99-DE-1F-25-30-6E-DF-59-0D-05-2B-43-8F-07-16"   string
    [4] "76-82-30-13-C2-B4-33-7D-32-E2-04-C7-13-3C-F3-AB"   string
    [5] "23-BF-A2-F4-E4-77-78-6B-A5-2C-D2-6B-6F-B3-6F-44"   string

收到:

    [0] "&\0\069-AB-DA-CC-1A-66-6A-27-C5-B4-FF-B7-2D-9F-75-06"  string
    [1] "&\0\01C-16-68-98-DF-6C-C9-16-54-5A-94-00-CA-57-77-CC"  string
    [2] "B6-24-7E-79-0C-66-14-5B-C0-32-F5-17-06-5D-13-87"   string
    [3] "1E-99-DE-1F-25-30-6E-DF-59-0D-05-2B-43-8F-07-16"   string
    [4] "76-82-30-13-C2-B4-33-7D-32-E2-04-C7-13-3C-F3-AB"   string
    [5] "23-BF-A2-F4-E4-77-78-6B-A5-2C-D2-6B-6F-B3-6F-44"   string

我得到大约50%的数据包正确无误。我可以发布套接字代码等,但我敢说它相当复杂。不过,如果需要,我会发布它。我有什么与插座有关的东西吗?我希望快速解决..但我怀疑我们之前会遇到任何问题。

提前感谢您提出任何建议。

编辑:在此处查看github存储库:https://github.com/Wotuu/RTS_XNA_v2/tree/master/SocketLibrary

根据请求,一些代码快照: MD5创建:https://github.com/Wotuu/RTS_XNA_v2/blob/master/PathfindingTest/PathfindingTest/UI/Menus/Multiplayer/TestConnectionMenu.cs:222

字符串 - >字节:https://github.com/Wotuu/RTS_XNA_v2/blob/master/SocketLibrary/Packets/Packet.cs:113

byte->字符串:https://github.com/Wotuu/RTS_XNA_v2/blob/master/SocketLibrary/Packets/PacketUtil.cs

1 个答案:

答案 0 :(得分:2)

请记住,TCP是一种流媒体协议。无法保证接收套接字将接收特定大小的数据包。收件人负责将收到的可能随机大小的数据包重新组合成连贯的消息。