关于上位机通过UDP于下位机通信问题?

CodeInfo_ CodeInfo_ 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的思想是MCU一直不断发送同一个字符‘3’,用上位机接收,发现一个问题,如果在上位机还没打开,单片机就开始工作的话,MFC的上位机就会收到“3烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫?”
单如果是先打开上位机,再让MCU工作的话,收到的就是‘3’,但好像要打开上位机几秒后再开MCU才可以,如果太快打开MCU收到的是‘33’
不知道为什么,另外我上位机打开前是会先进行登录窗口进行密码验证的;
下面附上我接收消息的处理函数:

DWORD WINAPI CShangweijiDlg::RecvProc(LPVOID lpParameter)
{
//获取主线传递的套接字和窗口句柄
SOCKET socket=((recvparam*)lpParameter)->socket;
HWND hwnd=((recvparam*)lpParameter)->hwnd;
delete lpParameter;
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);

char recvBuf[200];
char tempBuf[300];
int retval;
while(TRUE)
{
//接收数据

retval=recvfrom(socket,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);
if(SOCKET_ERROR==retval)
break;

if(strlen(recvBuf)!=0)//判断接收是否为空,若不为空执行下一步
{
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)recvBuf);//将内容传给主窗口
}

}
return 0;
}
//接收消息响应函数
void CShangweijiDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
//取出接收到的数据
CString str=(char*)lParam;

CString strTemp;
//获得已有的数据
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str+="\r\n";
str+=strTemp;
//显示所有接收到的数据
SetDlgItemText(IDC_EDIT_RECV,str);
}
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
CodeInfo_
网络编程 18,356 成员 64,161 内容