首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致问题的UDP recvfrom()

导致问题的UDP recvfrom()
EN

Stack Overflow用户
提问于 2011-11-11 05:26:52
回答 4查看 1.6K关注 0票数 1

我一直在尝试从客户端接收数据包,但是在recvfrom()过程中,我认为我做错了什么……

我有一个名为DataPacket的东西,它只是一个带有一些x&y值的类

客户端执行以下操作...

代码语言:javascript
复制
int UDPCon::Send(DataPacket dPacket)
{
    int n = sendto(m_Socket,  (char *)&dPacket, PACKETSIZE, 0, (struct sockaddr *)&m_RemoteAddress, m_SocketAddressSize);   
    return n;   
}

服务器接收到

代码语言:javascript
复制
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”中,“数据”就变成了“表达式无法求值”。

如果有任何帮助,我将不胜感激

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-11 05:31:31

看起来您发送的是一个结构,或者至少是DataPacket中的原始数据。在这种情况下,将服务器代码更改为

代码语言:javascript
复制
int CUDPSocket::Receive(DataPacket *data)
{
    int n = recvfrom(m_Socket, (char *) data, PACKETSIZE, 0, (struct sockaddr *)&m_RemoteAddress, &m_SocketAddressSize);
    return n;
}

不过,您应该显示DataPacket和PACKETSIZE的声明,上面可能会也可能不会做您需要做的事情。

票数 1
EN

Stack Overflow用户

发布于 2011-11-11 05:32:42

您的Receive函数接受一个指向DataPacket的指针。但是当你调用recvfrom时,你传递的是(char*) &data,它是一个指向指针的指针。这意味着你将数据包数据写在指针的上方,而不是写入指针中。

修复方法很简单,使用(char*)data调用recvfrom,这样recvfrom就可以写入DataPacket,而不是覆盖DataPacket指针。

票数 1
EN

Stack Overflow用户

发布于 2011-11-11 05:34:04

在接收方,data已经是一个指针,所以您使用& address-of操作符是错误的(该表达式的结果是指针的地址)。

只需将接收方调用更改为

代码语言:javascript
复制
int n = recvfrom(m_socket, (char *)data, ... );

将会解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8086530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档