在TCP/IP模式下如何获取传感器测量的数据?
现已经用MFC编写了一个客户端程序作为上位机软件,将激光传感器作为服务器端,发送指令到传感器后接受返回的测量数据
目前,连接传感器已完成,请问各位编程大神,如何完成指令发出和数据接收?
传感器指令的格式是十六进制的:0273524E204C4D447363616E6461746103
传感器回传的数据格式也是十六进制的
是不是需要单独定义一个数据类,包括存储数据长度的参数和存储数据的buffer?需要的话如何定义?
本人第一次弄这个东西,之前看孙鑫的VC++中的socket编程,可是始终无法成功的发送指令和接收数据,希望大神能够不吝指教!!!最好提供比较完整的代码!
这是之前自己写的代码:
void CGetDataDlg::OnBtnSend()
{
// TODO: Add your control notification handler code here
CString strSend;
GetDlgItemText(IDC_EDIT_SEND,strSend);
char* sendData=(LPSTR)(LPCSTR)strSend;
send(m_sockClient,sendData,strlen(sendData)+1,0);
SetDlgItemText(IDC_EDIT_SEND,"");
//将命令显示在接收框内
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
strTemp+="\r\n";
strTemp+=strSend;
SetDlgItemText(IDC_EDIT_RECV,strTemp);
//额外建立一个线程完成数据接收
PARAMETER *pParam=new PARAMETER;
pParam->sock=m_sockClient;
pParam->hwnd=m_hWnd;
HANDLE hThread=CreateThread(NULL,0,ReceiveProc,pParam,0,NULL);
CloseHandle(hThread);
}
void CGetDataDlg::OnBtnExit()
{
// TODO: Add your control notification handler code here
shutdown(m_sockClient,2);
closesocket(m_sockClient);
WSACleanup();
exit(-1);
}
DWORD WINAPI CGetDataDlg::ReceiveProc(LPVOID lpParameter)
{
SOCKET sock=((PARAMETER*)lpParameter)->sock;
HWND hwnd=((PARAMETER*)lpParameter)->hwnd;
// int recv;
char recvBuf[10000];
memset(recvBuf,0,sizeof(recvBuf));
int len=sizeof(recvBuf)+1;
recv(sock,recvBuf,len,0);
::PostMessage(hwnd,UM_DISPLAY,0,(LPARAM)recvBuf);
return 0;
}
void CGetDataDlg::OnDisplay(WPARAM wParam,LPARAM lParam)
{
CString str=(char*)lParam;
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
strTemp+="\r\n";
strTemp+=str;
SetDlgItemText(IDC_EDIT_RECV,strTemp);
}