Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Tcp向服务器发送数据?身份证还是反思?_C#_Reflection_Login_Tcp_Stream - Fatal编程技术网

C#Tcp向服务器发送数据?身份证还是反思?

C#Tcp向服务器发送数据?身份证还是反思?,c#,reflection,login,tcp,stream,C#,Reflection,Login,Tcp,Stream,首先,我找不到一个能准确解释我在这里要做什么的标题 我似乎无法理解的是,如何从tcp客户端向服务器发送一条包含多个部分的消息?例如: *(MSGID=1 /用户名:文森特/密码:123ADmin)考虑或类似的现有编码。这些实现将使用反射“神奇地将数据映射到类型”。剩下的唯一步骤是根据需要添加框架。基本帧可以是类型、长度、数据、校验和。该类型为[Protocol Buffer]解码提供对正确类型的分派,长度指定完成该帧所需的时间。继续阅读所有内容,然后在阅读“完整框架”时发送:不要使每种类型的阅读

首先,我找不到一个能准确解释我在这里要做什么的标题

我似乎无法理解的是,如何从tcp客户端向服务器发送一条包含多个部分的消息?例如:


*(MSGID=1 /用户名:文森特/密码:123ADmin)考虑或类似的现有编码。这些实现将使用反射“神奇地将数据映射到类型”。剩下的唯一步骤是根据需要添加框架。基本帧可以是类型、长度、数据、校验和。该类型为[Protocol Buffer]解码提供对正确类型的分派,长度指定完成该帧所需的时间。继续阅读所有内容,然后在阅读“完整框架”时发送:不要使每种类型的阅读逻辑不同!或者,考虑像JSON这样的文本基础传输格式。它不那么紧凑,有点慢,但调试起来也非常容易——也就是说,可以创建简单的客户端来框接任意请求。如果使用接口,则可以在JSON或协议缓冲区之间轻松切换,并且两种编码可以使用相同的DTO
private void HandleClient(TcpClient c)
    {
        byte[] packetIDData = new byte[2];
        c.GetStream().Read(packetIDData, 0, 2);
        ushort packetID = BitConverter.ToUInt16(packetIDData,0);

        Console.WriteLine("PacketID: " + packetID.ToString());
        switch (packetID)
        {
            case 0: 
                break;
            case (int)RequestTypeEnum.login:
                break;
            case (int)RequestTypeEnum.logout:
                break;
            case (int)RequestTypeEnum.ping:
                break;
            case (int)RequestTypeEnum.update:
                byte[] data = new byte[4];
                c.GetStream().Read(data, 0, 4);
                int length = BitConverter.ToInt32(data, 0);
                data = new byte[length];
                c.GetStream().Read(data, 0, length);

                List<byte> backData = new List<byte>();
                backData.AddRange(BitConverter.GetBytes((short)0));
                string response = Encoding.ASCII.GetString(data);
                backData.AddRange(BitConverter.GetBytes(Encoding.ASCII.GetByteCount(response)));
                backData.AddRange(Encoding.ASCII.GetBytes(response));
                c.GetStream().Write(backData.ToArray(), 0, backData.ToArray().Length);
                break;

        }
        c.Close();
    }
List<byte> updateData = new List<byte>();
        updateData.AddRange(BitConverter.GetBytes((short)RequestTypeEnum.login));
        updateData.AddRange(StringMethods.MakeString(username));
        updateData.AddRange(StringMethods.MakeString(password)); // this needs encryption
        client.GetStream().Write(updateData.ToArray(), 0, updateData.Count);

        client.GetStream().Read(new byte[2], 0, 2);
        string answer = StringMethods.ReadString(client);
        switch (answer)
        {
            case "success":
                return true;
            case "failed":
                return false;
            default:
                return false;   
        }