关于上位机通过UDP于下位机通信问题?
我的思想是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);
}