ReceiveFrom CAsyncSocket UDP 接收内存错误

lanneret1234 2009-12-04 09:42:13
请大家帮帮忙!!!!!在此先谢啦
在主对话框类中
//int IpLong = sizeof(lpSockAddr);
//m_MySocket.ReceiveFrom((char*)&m_ClientMessage, sizeof(m_ClientMessage), (sockaddr*)&lpSockAddr, &IpLong, 0);
CString ClientIp = _T("");
UINT ClientPort = 0;

memset(&m_ClientMessage,0, sizeof(m_ClientMessage)); //这句出错 内存错误 在初始化函数里可以



//m_MySocket.ReceiveFrom((char*)&m_ClientMessage, sizeof(ClientMessage), ClientIp, ClientPort, 0);


//char Buf[30] = {0};
//m_MySocket.ReceiveFrom((char*)Buf, 30, ClientIp, ClientPort, 0);

//m_ClientMessage为下面这个结构体
/*struct ClientMessage
{
int iMessageType; //类型
union _message
{
LoginMessage Login; //登陆
EnrolMessage Enrol; //注册
UpdateMessage Update; //更新
ReqChatMessage ReqChat; //请求聊天
}message;

};*/
每次运行ReceiveFrom都报 0x78b12920 (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x000005b0 时发生访问冲突
发送代码
m_MySocket.SendTo((char*)&m_MessageToS,
sizeof(m_MessageToS),
(sockaddr*)&lpSockAddr, sizeof(lpSockAddr),0);
我想应该是参数设置错了!!可是。。。。
...全文
147 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanneret1234 2009-12-05
  • 打赏
  • 举报
回复
请大家帮帮忙!!!!!在此先谢啦
在主对话框类中

CString ClientIp = _T("");
UINT ClientPort = 0;
m_MySocket.ReceiveFrom((char*)&m_ClientMessage, sizeof(ClientMessage), ClientIp, ClientPort, 0);




m_ClientMessage为下面这个结构体
struct ClientMessage
{
int iMessageType; //类型
union _message
{
LoginMessage Login; //登陆
EnrolMessage Enrol; //注册
UpdateMessage Update; //更新
ReqChatMessage ReqChat; //请求聊天
}message;
这样设置参数有什么问题吗??为什么每次都会说内存读取错误??
lanneret1234 2009-12-04
  • 打赏
  • 举报
回复
谢谢!!不过我是要C++的
swq1982 2009-12-04
  • 打赏
  • 举报
回复
楼主可以看看这里的例子http://www.codeproject.com/Messages/2958081/vSystem-Net-Sockets-Socket-ReceiveFrom-Byte-buffer.aspx
lanneret1234 2009-12-04
  • 打赏
  • 举报
回复
哪位老大有关于 CasyncSocket ReceiveFrom的例子啊 最好是VS2008
oyljerry 2009-12-04
  • 打赏
  • 举报
回复
直接类的构造函数里初始化赋值初始化
lanneret1234 2009-12-04
  • 打赏
  • 举报
回复
哦!!谢啦!!
arong1234 2009-12-04
  • 打赏
  • 举报
回复
没有报错不等于没错!!这个一定要当作铁律记住!!不是每个错误都会报出来的。

理论上即使是结构也不行,因为任何一个类型都有完整性要求的,memset往往无法满足
例如我在一个结构里定义两个关联的变量(长度和内容),两者是必须满足特定关系的,如果你用memset去做,就必然破坏这种关系。

[Quote=引用 2 楼 lanneret1234 的回复:]
可在在初始化函数里没报错啊!!结构体可以吧!!
[/Quote]
lanneret1234 2009-12-04
  • 打赏
  • 举报
回复
可在在初始化函数里没报错啊!!结构体可以吧!!
arong1234 2009-12-04
  • 打赏
  • 举报
回复
如果m_ClientMessage是一个类,你无论(char*)进行类型转换,还是memset都是不允许的,这只能用于普通的char*,不得用于类
内容概要:本文围绕基于交替方向乘子法(ADMM)的多主体综合能源系统分布式协同优化展开研究,提出了一种兼顾系统整体性能与各主体隐私保护的分布式优化框架,并提供了完整的Matlab代码实现。研究详细构建了包含电、热、气等多种能源形式耦合的多主体综合能源系统模型,设计了基于ADMM算法的分布式求解机制,实现了在去中心化架构下的协同优化调度。文中深入分析了算法的迭代流程、收敛条件及关键参数(如惩罚因子)对优化性能的影响,通过仿真实验验证了该方法在提升能源利用效率、促进多能协同、降低运行成本方面的有效性,适用于园区微网、能源互联网等复杂场景下的分布式决策需求。; 适合人群:具备一定优化理论基础和Matlab编程能力的研究生、科研人员及从事综合能源系统、智能电网、分布式能源管理等相关领域的工程技术人员。; 使用场景及目标:①实现多主体综合能源系统中电、热、气等多能流的协同调度与优化运行;②解决传统集中式优化带来的数据隐私泄露和计算负担过重问题,支持去中心化的分布式决策模式;③为能源互联网、智慧园区、微电网等实际应用场景提供可复现、易拓展的算法原型与技术参考。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,重点理解ADMM算法中增广拉格朗日函数的构造、变量更新规则及收敛判据的实现过程,关注惩罚参数设置对算法收敛速度与稳定性的影响,可进一步尝试将其拓展应用于其他分布式优化问题或与其他智能算法进行性能对比研究。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧