我一直在尝试从客户端接收数据包,但是在recvfrom()过程中,我认为我做错了什么……
我有一个名为DataPacket的东西,它只是一个带有一些x&y值的类
客户端执行以下操作...
int UDPCon::Send(DataPacket dPacket)
{
int n = sendto(m_Socket, (char *)&dPacket, PACKETSIZE, 0, (struct sockaddr *)&m_RemoteAddress, m_SocketAddressSize);
return n;
}服务器接收到
int CUDPSocket::Receive(DataPacket *data)
{
int n = recvfrom(m_Socket, (char *) &data, PACKETSIZE, 0, (struct sockaddr *)&m_RemoteAddress, &m_SocketAddressSize);
return n;
}当我只是简单地发送char而不进行类型转换时,这通常是有效的,所以代码可以正常工作。我想我在指针上做错了什么,一旦recvfrom()把数据放入“DataPacket”中,“数据”就变成了“表达式无法求值”。
如果有任何帮助,我将不胜感激
谢谢
发布于 2011-11-11 05:31:31
看起来您发送的是一个结构,或者至少是DataPacket中的原始数据。在这种情况下,将服务器代码更改为
int CUDPSocket::Receive(DataPacket *data)
{
int n = recvfrom(m_Socket, (char *) data, PACKETSIZE, 0, (struct sockaddr *)&m_RemoteAddress, &m_SocketAddressSize);
return n;
}不过,您应该显示DataPacket和PACKETSIZE的声明,上面可能会也可能不会做您需要做的事情。
发布于 2011-11-11 05:32:42
您的Receive函数接受一个指向DataPacket的指针。但是当你调用recvfrom时,你传递的是(char*) &data,它是一个指向指针的指针。这意味着你将数据包数据写在指针的上方,而不是写入指针中。
修复方法很简单,使用(char*)data调用recvfrom,这样recvfrom就可以写入DataPacket,而不是覆盖DataPacket指针。
发布于 2011-11-11 05:34:04
在接收方,data已经是一个指针,所以您使用& address-of操作符是错误的(该表达式的结果是指针的地址)。
只需将接收方调用更改为
int n = recvfrom(m_socket, (char *)data, ... );将会解决这个问题。
https://stackoverflow.com/questions/8086530
复制相似问题