将代码从C ++迁移到C#

时间:2016-04-29 22:22:41

标签: c# c++ sockets

我正在尝试编写服务器的C#版本。

原始客户端和服务器都是用C ++编写的。

从我的C ++客户端,我可以连接到新的C#服务器。但是由于我的C ++客户端使用指针发送数据,因此我无法正确阅读它。

C ++客户端将Char Ptr(char * pData)发送到我的服务器。这个数据包含一个Header(告知我发送的是哪种数据,即:Request Login)和一个Body(包含实际数据,即:ID和密码)。

检查旧服务器,我可以看到它读取这样的数据:

DWORD *dwpMsgID;
dwpMsgID = (DWORD *)(pData + DEF_INDEX4_MSGID); // define DEF_INDEX4_MSGID  0 because its the header position
switch (*dwpMsgID)
{
   ...
   case MSGID_REQUEST_LOGIN: doSomething(); // define MSGID_REQUEST_LOGIN 0x0DF3074F
   ...
}

然后,它会像这样检查登录/密码:

cp = (char *)(pData + DEF_INDEX2_MSGTYPE + 2);

memcpy(cAccountName, cp, 10);
cp += 10;
memcpy(cAccountPass, cp, 10);
cp += 10;

我的疑问是:因为我从C#套接字获取一个byte [],我怎么能检查Header是否与“0x0DF3074F”匹配,然后获取AccountName和密码? 我试图将该byte []转换为String(使用Encoding.Unicode.GetString()或Encoding.ASCII.GetString()),但我没有成功。

提前致谢!欢迎任何帮助! 此致

1 个答案:

答案 0 :(得分:1)

您的问题不是使用指针发送数据,而是发送二进制数据。您的C#服务器需要将4个字节转换为数字。

您可以使用BitConverter.ToInt32

您已经了解了如何处理有效负载的字符串部分。