我想发送的结构:
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] - &gt; m_bIsAlive = 205?
答案 0 :(得分:1)
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
()。您必须始终检查每次系统调用的返回值,准备好处理错误和每个可能的返回值,除非外部情况(这种情况很少)保证系统调用永远不会失败。