在TCP/IP模式下如何获取传感器测量的数据?

weixin_38818447 2017-06-07 03:59:57
现已经用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);
}
...全文
526 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-06-08
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545

18,356

社区成员

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

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