糖果派对官方网站_可以赌钱的糖果游戏_手机版
bb电子糖果派对用MFC创建了三个SOCKET通信顾客端,怎么样将传感器传输的数据持续发送到服务器端。

bb电子糖果派对用MFC创建了三个SOCKET通信顾客端,怎么样将传感器传输的数据持续发送到服务器端。

作者:网络编程    来源:未知    发布时间:2019-12-24 21:16    浏览量:

#include"stdafx.h"#include"六维力采集demo.h"#include"六维力采集demoDlg.h"#include"afxdialogex.h"#include"MySocketC.h"#ifdef_DEBUG#definenewDEBUG_NEW#endif//C六维力采集demoDlg对话框SOCKETsockConn;DWORDWINAPISocket_ListenProc(LPVOIDlpParam);DWORDWINAPISocket_RecvProc(LPVOIDlpParam);BOOLm_bListen;//侦听标志CStringip;//记录客户端ip地址DWORDWINAPISocket_ListenProc(LPVOIDlpParam){SOCKETsock=((LISTENPARAM*)lpParam)-sock;//本机socketHWNDhwnd=((LISTENPARAM*)lpParam)-hwnd;//对话框句柄SOCKADDR_INaddrClient;intnLen=sizeof(SOCKADDR);while(m_bListen)//监听标识符{sockConn=accept(sock,(SOCKADDR*)addrClient,nLen);if(INVALID_SOCKET!=sockConn){CStringstr;str.Format(_T("%s"),(CString)inet_ntoa(addrClient.sin_addr));RECVPARAMRecvParam;RecvParam.hwnd=hwnd;RecvParam.sock=sockConn;RecvParam.ip=str;ip=str;//开一个接收数据处理的线程用来接收数据HANDLEhThread=CreateThread(NULL,0,Socket_RecvProc,(LPVOID)RecvParam,0,NULL);}}return0;}DWORDWINAPISocket_RecvProc(LPVOIDlpParam){SOCKETsock=((RECVPARAM*)lpParam)-sock;HWNDhwnd=((RECVPARAM*)lpParam)-hwnd;charrecvBuf[100]={0};intnRetVal;while(TRUE){nRetVal=recv(sock,recvBuf,8,0);//第三个参数为接收数据的长度,本传感器固定接收大小为8if((INVALID_SOCKET==nRetVal)||(0==nRetVal)||(nRetVal==WSAECONNRESET))break;//如果成功接收8字节则发送接收消息,调用相应的接收处理函数进行数据处理if(nRetVal==8)::SendMessage(hwnd,WM_RECVDATA,(WPARAM)0,(LPARAM)recvBuf);}return0;}C六维力采集demoDlg::C六维力采集demoDlg(CWnd*pParent/*=NULL*/):CDialogEx(C六维力采集demoDlg::IDD,pParent),m_Port(6001),m_DataReceive(),m_DataSend(_T("")){m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);m_FX=0.0f;m_FY=0.0f;m_FZ=0.0f;m_MX=0.0f;m_MY=0.0f;m_MZ=0.0f;m_FrameNo=0;m_IP=_T("");FreNum=0;}voidC六维力采集demoDlg::DoDataExchange(CDataExchange*pDX){CDialogEx::DoDataExchange(pDX);DDX_Text(pDX,IDC_FX,m_FX);DDX_Text(pDX,IDC_FY,m_FY);DDX_Text(pDX,IDC_FZ,m_FZ);DDX_Text(pDX,IDC_MX,m_MX);DDX_Text(pDX,IDC_MY,m_MY);DDX_Text(pDX,IDC_MZ,m_MZ);DDX_Text(pDX,IDC_Frame,m_FrameNo);DDX_Text(pDX,IDC_IP,m_IP);DDX_Text(pDX,IDC_Port,m_Port);DDX_Control(pDX,IDC_Connect,m_ConPC);DDX_Control(pDX,IDC_IPADDRESS1,m_ipaddress);DDX_Text(pDX,IDC_DataSend,m_DataSend);}BEGIN_MESSAGE_MAP(C六维力采集demoDlg,CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_MESSAGE(WM_RECVDATA,OnRecvData)ON_BN_CLICKED(IDC_BTNCONNECT,C六维力采集demoDlg::OnBnClickedBtnconnect)ON_BN_CLICKED(IDCANCEL,C六维力采集demoDlg::OnBnClickedCancel)ON_BN_CLICKED(IDC_Begin,C六维力采集demoDlg::OnBnClickedBegin)ON_BN_CLICKED(IDC_Stop,C六维力采集demoDlg::OnBnClickedStop)ON_WM_TIMER()ON_BN_CLICKED(IDC_Connect,C六维力采集demoDlg::OnBnClickedConnect)ON_BN_CLICKED(IDC_SendData,C六维力采集demoDlg::OnBnClickedSenddata)ON_BN_CLICKED(IDC_Change,C六维力采集demoDlg::OnBnClickedChange)END_MESSAGE_MAP()//C六维力采集demoDlg消息处理程序BOOLC六维力采集demoDlg::OnInitDialog(){CDialogEx::OnInitDialog();m_connect=false;m_ipaddress.SetWindowTextW(_T("192.168.1.197"));//设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动//执行此操作SetIcon(m_hIcon,TRUE);//设置大图标SetIcon(m_hIcon,FALSE);//设置小图标//TODO:在此添加额外的初始化代码//以下是触发SOCKET。//为以后创建套接字做准备WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,wsaData);//由于对话框已关闭,所以将返回FALSE以便退出应用程序,//而不是启动应用程序的消息泵。if(err==0){AfxMessageBox(_T("触发SOCKET成功"));}else{AfxMessageBox(_T("触发SOCKET失败"));}//设定定时器实时刷新对话框中的数据SetTimer(1,100,NULL);returnTRUE;//除非将焦点设置到控件,否则返回TRUE}LRESULTC六维力采集demoDlg::OnRecvData(WPARAMwParam,LPARAMlParam){//CStringip=_T("0");char*pRecvData;pRecvData=(char*)lParam;RecvData(ip,pRecvData);return0;}//接收处理函数//本函数处理接收过来的数据,即由接收的原始数据得到6个通道的具体值(电压模拟值,可供后续开发使用)//数据处理过程算法固定(根据下位机发送数据的机制)//其中每一帧数据分上一半和下一半进行处理,在程序中用FIRST进行标识//ONE标识第一次按采集按钮,即第一次采集voidC六维力采集demoDlg::RecvData(CStringip,char*pData){m_IP=ip;//保存客户端的ip地址if(ONE!FIRST){ONE=FALSE;FIRST=TRUE;return;}shortnum,data1,data2,data;intg_Frequency=500;//采样频率默认为1000,可以根据需要进行改动data=0x00FF;if(FIRST)//前一半{FIRST=FALSE;if(FreNum!=5000/g_Frequency)return;//FrameID为下位机发送的帧号,依据下位机发送机制进行处理,可能会出现帧号非规律化(因为下位机原因)//建议通过让帧号从1开始递增的方法记录帧号,以便后续使用buff.FrameID=(BYTE)pData[2]*256*256*256+(BYTE)pData[3]*256*256+(BYTE)pData[0]*256+(BYTE)pData[1];m_FrameNo++;//帧号自增data1=data2=0;data1=pData[4]*256;data2=pData[5]data;num=data1+data2;buff.AD[0]=num/3.2768;data1=data2=0;data1=pData[6]*256;data2=pData[7]data;num=data1+data2;buff.AD[2]=num/3.2768;}else//后一半{FIRST=TRUE;if(FreNum==5000/g_Frequency){data1=data2=0;data1=pData[0]*256;data2=pData[1]data;num=data1+data2;buff.AD[4]=num/3.2768;data1=data2=0;data1=pData[2]*256;data2=pData[3]data;num=data1+data2;buff.AD[1]=num/3.2768;data1=data2=0;data1=pData[4]*256;data2=pData[5]data;num=data1+data2;buff.AD[3]=num/3.2768;data1=data2=0;data1=pData[6]*256;data2=pData[7]data;num=data1+data2;buff.AD[5]=num/3.2768;FreNum=1;return;}FreNum++;}m_IP=ip;//设定客户端的ip//以下是6个通道的原始电压值//分别对应6个对话框中的值,电压值可供后续开发处理使用m_FX=buff.AD[0];m_FY=buff.AD[1];m_FZ=buff.AD[2];m_MX=buff.AD[3];m_MY=buff.AD[4];m_MZ=buff.AD[5];请问大手子们这六个电压值后续如何调用,想实现将其数据持续发送到服务器端。

友情链接: 网站地图
Copyright © 2015-2019 http://www.tk-web.com. bb电子糖果派对有限公司 版权所有