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

本文关键字:中文 文字 结构 套接字 | 更新日期: 2023-09-27 18:30:41

我在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));

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

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

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

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

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

您应该查看Beej的网络编程指南,他们几乎提供了设置客户端/服务器程序所需的一切,特别是第五章,他们引导您完成设置连接的过程。