我正在嘗試編寫一個C#版本的服務器。將代碼從C++遷移到C#
原始客戶端和服務器都是用C++編寫的。
從我的C++客戶端,我可以連接到新的C#服務器。但是因爲我的C++客戶端使用指針發送數據,所以我有一些麻煩來正確讀取它。
C++客戶端將Char Ptr(char * pData)發送到我的服務器。這些數據包含一個Header(通知我發送什麼類型的數據,即:請求登錄)和一個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#套接字獲取一個字節[],我怎麼能檢查標題以查看它是否與「0x0DF3074F」匹配,然後獲取AccountName和Password? 我試圖將該字節[]轉換爲字符串(使用Encoding.Unicode.GetString()或Encoding.ASCII.GetString()),但我沒有成功。
提前致謝!任何幫助將受到歡迎,在這一點上! Regards
C++中的字符數組以'\ 0'結尾。在c#中,當向C++發送數據時必須添加結束字符,並且必須測試結束字符以確定從C++獲取數據時字符數組的長度 – jdweng