简单问题,用过CMSWinSockControl控件的兄弟姐妹请回答:要求该控件获得数据

zzz1228 2002-11-12 02:58:28
项目经理要求利用CMSWinSockControl控件获得数据,
在一个对话框中,我拖入一个CMSWinSockControl控件到对话框后,利用classwizard给
控件命名,编译就出错,为什么??
void CMSWinsockControl::GetData(VARIANT* data, const VARIANT& type, const VARIANT& maxLen)
void CMSWinsockControl::Connect(const VARIANT& RemoteHost, const VARIANT& RemotePort)
这两个函数中的参数分别代表什么??

...全文
197 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzz1228 2002-11-18
  • 打赏
  • 举报
回复
再请问两位:我要在服务器和客户机之间通讯,该怎样实现
zzz1228 2002-11-18
  • 打赏
  • 举报
回复
多谢两位啦
wj59(wj59) ,我想不用大侠帮我翻译英文单词,^_^
Qinzixiong(花无才) ,感谢你啦,等我试过之后给分
zzz1228 2002-11-18
  • 打赏
  • 举报
回复
Qinzixiong(花无才) ;请问为什么在接收端不加OnSend()函数就接不到数据???
不明白???
Qinzixiong 2002-11-15
  • 打赏
  • 举报
回复
首先,声明一些全局公共变量,代码如下所示:

BYTE send_data_buf[100]; // 发送缓冲区

BYTE recv_data_buf[500]; // 接收缓冲区

int send_data_len; //发送数据长度

int recv_data_len; //接收数据长度

m_slave1是Winsock控件。

动态初始化设置Winsock控件的一些属性,准备通信。

void CWinsock_exampleDlg::OnConnect()

{

VARIANT LocalPort_VT,LocalIP_VT;

m_slave1.Close(); // 关闭当前Winsocket

m_slave1.SetLocalPort(m_port); //本机端口号

m_slave1.SetRemotePort(m_port); //远程端口号

m_slave1.SetRemoteHost(m_udp_ip_port); //对方IP地址

m_slave1.SetProtocol(1); // 选择UDP协议,1=UDP, 0=TCP

LocalPort_VT.vt=VT_I2;//数据为整数

LocalPort_VT.lVal= m_port;

LocalIP_VT.vt=VT_BSTR;//数据为字符串

LocalIP_VT.bstrVal=m_slave1.GetLocalIP().AllocSysString();

m_slave1.Bind(LocalPort_VT,LocalIP_VT); // 绑定本机IP地址和端口号

VARIANT comm_vt;

CString temp="Hello";

comm_vt.vt=VT_BSTR;

comm_vt.bstrVal=temp.AllocSysString();

m_slave1.SendData(comm_vt);//发送连接信息

}

  连接操作完成,控件初始化完成,即可发送数据到对方。因此在Winsock控件的Send事件中加入以下代码:

void CWinsock_exampleDlg::OnSend()

{

SAFEARRAY * psa;//安全数组

SAFEARRAYBOUND rgsabound[1];

rgsabound[0].lLbound = 0;

rgsabound[0].cElements = send_data_len; // SAFEARRAY长度

psa = SafeArrayCreate(VT_UI1, 1, rgsabound);//创建类型为字节的数组

long len;

for(len=0;len<send_data_len;len++)

SafeArrayPutElement(psa, &len, &send_data_buf[len]);//缓冲区数据入安全数组

VARIANT send_var;

send_var.vt=VT_ARRAY|VT_UI1;

send_var.parray=psa;

m_slave1.SendData(send_var);//数据发送

}

系统收到网络数据包,如果数据包IP地址、端口、协议类型与Winsock控件网络参数吻合,将触发消息,通知控件进行处理,即触发Winsock控件的DataArrival事件。本例中将获取的二进制数据转化成ASCII,因此在Winsock控件的DataArrival事件加入以下代码:

void CWinsock_exampleDlg::OnDataArrivalWinsockSlave1(long bytesTotal)

{

SAFEARRAY * psa_recv;

SAFEARRAYBOUND rgsabound[1];

rgsabound[0].lLbound = 0;

rgsabound[0].cElements = bytesTotal;// 设置数组的长度

psa_recv = SafeArrayCreate(VT_UI1, 1, rgsabound);

VARIANT recv_var;

recv_var.vt=VT_ARRAY|VT_UI1;//设置数据类型为字节型数组

recv_var.parray=psa_recv;

VARIANT Vtype;

Vtype.vt=VT_ERROR;

VARIANT Maxlen;

Maxlen.vt=VT_I4;

Maxlen.lVal=bytesTotal;

m_slave1.GetData(&recv_var,Vtype,Maxlen);//接收数据包

psa_recv=recv_var.parray;

long len;

for(len=0;len< bytesTotal;len++)

SafeArrayGetElement(psa_recv, &len, &recv_data_buf[len]);//数据存入接收缓冲区

BYTE temp;

long ls_len=0;

m_edit_input_cs=m_edit_input_cs+"\r\n Receive Packer: ";

ls_len=m_edit_input_cs.GetLength();

for(len=0;len< bytesTotal;len++)// 二进制字节数据转换为ASCII码显示。

{

temp=' ';

m_edit_input_cs.Insert(ls_len,temp);

ls_len++;

temp=recv_data_buf[len]>>4;

temp=temp&0x0f;

if(temp>=0 && temp<=9) temp=temp+0x30;// 数字

else temp=temp+0x37;//字母

m_edit_input_cs.Insert(ls_len,temp);

ls_len++;

temp=recv_data_buf[len];

temp=temp&0x0f;

if(temp>=0 && temp<=9) temp=temp+0x30;

else temp=temp+0x37;

m_edit_input_cs.Insert(ls_len,temp);

ls_len++;

}

UpdateData(FALSE);

}

wj59 2002-11-15
  • 打赏
  • 举报
回复
GetData:data:数据,type:数据类型,maxLen:数据长度


Connect:RemoteHost:地址,RemotePort:端口号


全部是引用
zzz1228 2002-11-13
  • 打赏
  • 举报
回复
没人用过吗?清帮忙回答一下,焦头烂额
zzz1228 2002-11-12
  • 打赏
  • 举报
回复
void CMSWinsockControl::GetData(VARIANT* data, const VARIANT& type, const VARIANT& maxLen)
void CMSWinsockControl::Connect(const VARIANT& RemoteHost, const VARIANT& RemotePort)
这两个函数中的参数分别代表什么?
是不是全部是返回的数据?
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在计算机视觉领域,实时目标跟踪是许多应用的核心任务,例如监控系统、自动驾驶汽车和无人机导航等。本文将重点介绍一种在2017年备受关注的高效目标跟踪算法——BACF(Boosted Adaptive Clustering Filter)。该算法因其卓越的实时性和高精度而脱颖而出,其核心代码是用MATLAB编写的。 BACF算法全称为Boosted Adaptive Clustering Filter,是基于卡尔曼滤波器改进的一种算法。传统卡尔曼滤波在处理复杂背景和目标形变时存在局限性,而BACF通过引入自适应聚类和Boosting策略,显著提升了对目标特征的捕获和跟踪能力。 自适应聚类是BACF算法的关键技术之一。它通过动态更新特征空间中的聚类中心,更准确地捕捉目标的外观变化,从而在光照变化、遮挡和目标形变等复杂情况下保持跟踪的稳定性。此外,BACF还采用了Boosting策略。Boosting是一种集成学习方法,通过组合多个弱分类器形成强分类器。在BACF中,Boosting用于优化目标检测性能,动态调整特征权重,强化对目标识别贡献大的特征,从而提高跟踪精度。BACF算法在设计时充分考虑了计算效率,能够在保持高精度的同时实现快速实时的目标跟踪,这对于需要快速响应的应用场景(如视频监控和自动驾驶)至关重要。 MATLAB作为一种强大的数学计算和数据分析工具,非常适合用于算法的原型开发和测试。BACF算法的MATLAB实现提供了清晰的代码结构,方便研究人员理解其工作原理并进行优化和扩展。通常,BACF的MATLAB源码包含以下部分:主函数(实现整个跟踪算法的核心代码)、特征提取模块(从视频帧中提取目标特征的子程序)、聚类算法(实现自适应聚类过程)、Boosting算法(包含特征权重更新的代
内容概要:本书《Deep Reinforcement Learning with Guaranteed Performance》探讨了基于李雅普诺夫方法的深度强化学习及其在非线性系统最优控制中的应用。书中提出了一种近似最优自适应控制方法,结合泰勒展开、神经网络、估计器设计及滑模控制思想,解决了不同场景下的跟踪控制问题。该方法不仅保证了性能指标的渐近收敛,还确保了跟踪误差的渐近收敛至零。此外,书中还涉及了执行器饱和、冗余解析等问题,并提出了新的冗余解析方法,验证了所提方法的有效性和优越性。 适合人群:研究生及以上学历的研究人员,特别是从事自适应/最优控制、机器人学和动态神经网络领域的学术界和工业界研究人员。 使用场景及目标:①研究非线性系统的最优控制问题,特别是在存在输入约束和系统动力学的情况下;②解决带有参数不确定性的线性和非线性系统的跟踪控制问题;③探索基于李雅普诺夫方法的深度强化学习在非线性系统控制中的应用;④设计和验证针对冗余机械臂的新型冗余解析方法。 其他说明:本书分为七章,每章内容相对独立,便于读者理解。书中不仅提供了理论分析,还通过实际应用(如欠驱动船舶、冗余机械臂)验证了所提方法的有效性。此外,作者鼓励读者通过仿真和实验进一步验证书中提出的理论和技术。

18,363

社区成员

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

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