C# 识别套接字消息

C# 识别套接字消息,c#,sockets,bytebuffer,C#,Sockets,Bytebuffer,下面我有一个处理套接字消息的代码片段,我想知道为了不导致返回,应该发送什么消息 其中SocketPacket是存储接收到的套接字的类,DataLength是接收到的消息的长度,dataBuffer存储消息 int num3; byte num6 = 0; SocketPacket workSocket; int DataLength; if (workSocket.dataBuffer[0] == 0x33) { if (DataLength < 0xbb) {

下面我有一个处理套接字消息的代码片段,我想知道为了不导致返回,应该发送什么消息

其中SocketPacket是存储接收到的套接字的类,DataLength是接收到的消息的长度,dataBuffer存储消息

int num3;
byte num6 = 0;
SocketPacket workSocket;
int DataLength;

if (workSocket.dataBuffer[0] == 0x33)
{
    if (DataLength < 0xbb)
    {
        return false;
    }

    for (num3 = 0; num3 < 0xba; num3++)
    {
        num6 = (byte) (num6 + workSocket.dataBuffer[num3]);                        
    }

    // how to get pass this if condition??
    if (num6 != workSocket.dataBuffer[0xba])
    {
        return false;
    }
}
intnum3;
字节num6=0;
SocketPacket工作socket;
int数据长度;
if(工作组数据缓冲[0]==0x33)
{
if(数据长度<0xbb)
{
返回false;
}
对于(num3=0;num3<0xba;num3++)
{
num6=(字节)(num6+workSocket.dataBuffer[num3]);
}
//如果条件允许,如何通过此测试??
if(num6!=工作组数据缓冲区[0xba])
{
返回false;
}
}
所以

  • 要向服务器发送什么消息才能通过最后一个if条件?(据我了解,信息长度至少应为187,第一位数字应为“3:…………”)
  • 什么是0xba、0x33、0xbb等。。。。?十六进制?我应该如何重新构造输入消息?把这些转换成什么?或对我来说没有任何意义
  • 我试图将
    workSocket.dataBuffer[0或1或任何int]
    转换为可读字符串
    Convert.ToChar(workSocket.dataBuffer[0])
    workSocket.dataBuffer[0].toString()
    给出了不同的结果。为什么呢

  • 好的,这里有一条固定长度的消息(187字节的消息)。第一个字节是标识消息开头的标记,如果第一个字节不是0x33,则代码不处理缓冲区中的字节

    接下来,在For语句中有一个校验和。它将所有前186个字节相加,以便将结果与最后一个字节(预先计算的校验和)进行比较。这是为了验证消息是否正常(顺便说一句,这是无用的,因为协议保证流/数据报正常)

    那么,关于你的问题:

    要向服务器发送什么消息才能通过最后一个if条件?

    好的,您需要发送187字节长的消息(简单地说是一个字节[187]):第一个必须是0x33,接下来是内容,最后一个必须是校验和(您应该以代码段显示的相同方式计算)

    例如:以下缓冲区有一条有效消息(将通过if条件的消息)。它只是从标记字节(0x33)开始,接下来的185个字节是零(我没有赋值),然后校验和是0x33+0+0+0+0。。。0 ... = 0x33

    var buffer = new byte[187];
    buffer[0] = 0x33;
    buffer[186] = 0x33; 
    
    什么是0xba、0x33、0xbb等。。。。?十六进制?

    是的,它们只是十六进制的数字

    我尝试转换(sic)得到不同的结果。为什么会这样?

    套接字发送/接收字节(只是数字),但真正的问题是:为什么您认为它们必须是文本?可能是文字,但谁知道呢。这是协议(协议)的一部分,两个端点都同意并允许它们交换数据。所以,为了能够处理它们,您必须知道这185个字节(187-1字节表示mark-1字节校验和)意味着什么

    现在,你正在做的是一个协议的逆向工程,这是因为很明显你不知道消息格式,我猜你不知道内容的含义是什么,即使你是对的,内容只是文本,你也忽略了使用的编码。这些是你需要关注的事情


    我希望这对您有所帮助。

    我已经编辑了您的标题。请看“”,其中的共识是“不,他们不应该”。谢谢!是的,我正在尝试对某个程序的输入消息进行反向工程。对于那些不知道自己的意思的
    0x33
    0x76
    0xc000000
    的人,我真的很困惑
    var buffer = new byte[187];
    buffer[0] = 0x33;
    buffer[186] = 0x33;