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

本文关键字:字符 套接字 | 更新日期: 2023-09-27 18:16:43

我们正在制作一款使用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

String->byte: https://github.com/Wotuu/RTS_XNA_v2/blob/master/SocketLibrary/Packets/Packet.cs:113

->

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

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

请记住TCP是一个流协议。不能保证接收套接字将接收特定大小的数据包。接收方负责将接收到的可能随机大小的数据包重新组装成连贯的消息。