[英]Sending / Receiving a struct in C++ via Winsock
我要發送的結構:
struct Client
{
SOCKET socket = 0;
float m_fX = 0;
float m_fY = 0;
float m_fRot = 0;
bool m_bIsAlive = false;
Powerups m_ePowerup = Powerups::lazer;
};
客戶端發送結構到服務器:
char* buffer = new char[sizeof(Client)];
memcpy(buffer, &dataToServer, sizeof(Client));
send(sock, (char*)dataToServer, sizeof(Client), NULL);
服務器從客戶端接收結構:
char* buffer = new char[sizeof(Client)];
recv((SOCKET)socketData, buffer, sizeof(Client), NULL);
memcpy(m_pClients[i], (void*)buffer, sizeof(Client));
std::cout << "\tSocket: " << (int)(SOCKET)socketData << "\t" << m_pClients[i]->m_bIsAlive << std::endl;
為什么打印出來就像m_pClients [i]-> m_bIsAlive = 205?
char* buffer = new char[sizeof(Client)];
memcpy(buffer, &dataToServer, sizeof(Client));
send(sock, (char*)dataToServer, sizeof(Client), NULL);
在我看來,您要在這里將第二個參數send()用作buffer
。 此外,如果dataToServer
是指向Client
結構的指針,則memcpy()
的第二個參數不應是指向該指針的指針。
此外,您的代碼也無法同時檢查send()和recv()的返回值。 僅僅因為您要求發送sizeof(Client)
字節,您絕對不能保證此請求將成功或寫入許多字節。
recv
()也是如此。 您必須始終檢查每個系統調用的返回值,並准備好處理錯誤和每個可能的返回值,除非外部情況(很少有這種情況)保證系統調用永遠不會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.