通过套接字发送结构并接收中文字母

时间:2014-11-16 14:26:19

标签: c# c++ sockets

我在C ++中有这个结构。

struct test
{
     int num;
     int quest;
     wchar_t name[64];
};

int main()
{
    test mystruct;
    mystruct.num = 12;
    mystruct.quest = 2;
    memcpy(mystruct.name,var1,sizeof(var1)); // var1 is an char [64] with the request name
    send(Socket->ConnectSocket, (char*)&mystruct, sizeof(test), 0);
}

另一方面,我有以下代码,用C#编写

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct test
{
    public int num;
    public int quest;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
    public string name;
}
........
test structtest;
this.Receiver_og.Receive(this.buffer);
this.structtest = (test)Marshal.PtrToStructure(gcHandle.AddrOfPinnedObject(), typeof(test));

除了我只看到中文字母的字符串名称外,这段代码工作正常。我该如何解决?

2 个答案:

答案 0 :(得分:1)

您正在将一个char数组(包含8位字符)复制到wchar_t数组中,该数组应包含16位unicode字符。简单地复制字符会给你一个16位字符,它是两个8位字符的组合,因此就是垃圾。您需要使用MultiByteToWideChar API将8位字符转换为unicode字符。

答案 1 :(得分:0)

如果这是您的所有代码,您似乎没有设置连接。

据我所知,虽然我还没有使用c ++和c#中的套接字,但你需要通过创建套接字,设置选项,绑定,监听然后进行通信来设置客户端/服务器。 / p>

您应该查看Beej's guide to Network Programming,他们几乎拥有设置客户端/服务器程序所需的任何内容,特别是Fifth Chapter,他们会引导您完成设置连接的过程。