来自Byte []的GetString在通过套接字发送后产生不同

时间:2015-03-28 13:42:23

标签: c# sockets

所以我使用C#套接字将字符串从一个进程发送到另一个进程。我使用字节数组发送字符串。当我在调试期间在每个进程中使用GetString(Byte [])时,当Byte数组中的值与调试器的点完全相同时,我会得到不同的结果。在这个过程中,我使用套接字发送字符串,当使用GetString()时,我得到相同的字符串。但是,在收到其他规模的数据后,我又收回了胡言乱语。

发送我使用的字符串:

        String strToSend = "This is just a test";
        Byte[] stringBytes = System.Text.Encoding.ASCII.GetBytes(strToSend);
        Int32 stringSize = stringBytes.Length;
        Int32 messageLengthInBytes = sizeof(Byte) + sizeof(Int32) + sizeof(Int32) + stringSize;

        Byte[] message = new Byte[messageLengthInBytes];
        message[0] = (Byte)MessageType.SendString;

        unsafe
        {
            Marshal.Copy((IntPtr)(Int32*)&messageLengthInBytes, message, 1, sizeof(Int32));
            Marshal.Copy((IntPtr)(Int32*)&stringSize, message, 5, sizeof(Int32));
            GCHandle pinnedArray = GCHandle.Alloc(stringBytes, GCHandleType.Pinned);
            IntPtr pointer = pinnedArray.AddrOfPinnedObject();
            Marshal.Copy((IntPtr)(Int32*)&pointer, message, 9, stringSize);
            pinnedArray.Free();
        }

        this.connection.SendMessage(message);

要在我使用的其他进程中接收字符串:

                messageType = (MessageType)data[dataOffset];
                Debug.WriteLine(messageType.ToString());
                dataOffset++;

                Marshal.Copy(data, dataOffset, (IntPtr)(Int32*)&messageLengthInBytes, sizeOfInt32);
                dataOffset += sizeOfInt32;
                    Int32 stringSize = 0;
                    Marshal.Copy(data, dataOffset, (IntPtr)(Int32*)&stringSize, sizeOfInt32);
                    dataOffset += sizeOfInt32;
                    byte[] stringBytes = new byte[stringSize];
                    Array.Copy(data,dataOffset,stringBytes,0,stringSize);
                    dataOffset += stringSize;
                    String recievedString = System.Text.Encoding.UTF8.GetString(stringBytes);

我收回了看起来像“h z\ 0 \ 0 \ 0 \0 \ 0 \ 0 \ 0 \ 0 \0 z”的乱码。

我确信使用Marshal.Copy()时没有偏移问题。正如我所提到的,如果我比较Visual Studio调试器中每个Byte []中的整数值,它们具有相同的值!我不明白发生了什么。

1 个答案:

答案 0 :(得分:-1)

您在发送时使用ASCII.GetBytes(),但在解码收到的字节[]时使用UTF8.GetString()。