上位机通过UDP方式获取MCU发送的数据
2015-04-30 15:53
483 查看
我的硬件设备是使用的WIFI串口模块,MCU将要发送的数据通过WIFI串口模块发送出来。由于我需要的数据发送频率较高,且不需要可靠传输,所以采用了UDP方式。为了在上位机上显示收到的数据,需要用到WIN32的socket编程。结合网络上的资料,我的代码整理如下:
需要说明的是,在数据接收过程中,使用了recvfrom函数,这个函数默认为阻塞通信方式,即没有数据时则线程停止在这里,直到有数据为止,有多少数据读多少数据,超过缓冲区大小时则仅保留前N个数据。
在数据处理程序中进一步添加数据显示代码,就可以在上位机中实时显示MCU发送的数据了。
// 头文件 #include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include <iostream> #include <stdio.h> #include <string> #include <winsock2.h> #include <windows.h> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib, "Winmm.lib") using namespace std; SOCKET m_socket; //定义成全局,这样可以在各个函数之间使用 struct sockaddr_in server; //用于存储网络地址等信息,含义可以参考:http://blog.csdn.net/joeblackzqq/article/details/8258693 BOOL InitWinsock() // 套接字初始化 http://www.oschina.net/code/snippet_222150_18666 { int Error; WORD Version; Version=MAKEWORD(2,2); Error=WSAStartup(Version,&Wsa); if(Error!=0) { return FALSE;} else{ if(LOBYTE(Wsa.wVersion)!=2 || HIBYTE(Wsa.wHighVersion)!=2) { WSACleanup(); return FALSE; } } return TRUE; } // 数据更新线程 DWORD WINAPI DataUpdateThreadProc(LPVOID lpParam) { int len =sizeof(server); while(1) { char buffer[1024]="\0"; if (recvfrom(m_socket,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len) != SOCKET_ERROR) //接收数据 { // 数据处理,接收到的数据存储在buffer中 } } return 0; } // 主函数 int _tmain(int argc, _TCHAR* argv[]) { InitWinsock(); int len =sizeof(server); server.sin_family=AF_INET; server.sin_port=htons(8899); ///要访问的sever端口 server.sin_addr.s_addr=inet_addr("192.168.1.1"); ///server的地址 m_socket=socket(AF_INET,SOCK_DGRAM,0); char UdpSndBuf[2] = {0x01,0x20}; //要发送的数据 if (sendto(m_socket,UdpSndBuf,sizeof UdpSndBuf,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR) //发送数据 { cout<<"------Data Send Success---------"<<endl; } DWORD threadID; HANDLE hThread; hThread = CreateThread(NULL,0,DataUpdateThreadProc,NULL,0,&threadID); // 创建数据更新线程 while(1); closesocket(socket1); return 0; }
需要说明的是,在数据接收过程中,使用了recvfrom函数,这个函数默认为阻塞通信方式,即没有数据时则线程停止在这里,直到有数据为止,有多少数据读多少数据,超过缓冲区大小时则仅保留前N个数据。
在数据处理程序中进一步添加数据显示代码,就可以在上位机中实时显示MCU发送的数据了。
相关文章推荐
- socket通信——通过Udp传输方式,将一段文字数据发送出去
- socket通信——通过Udp传输方式,将一段文字数据发送出去
- Android socket通过UDP的方式发送,接收数据
- Android之通过向WebService服务器发送XML数据获取相关服务
- java 通过http方式获取返回的数据
- JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据
- Android之通过向WebService服务器发送XML数据获取相关服务
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- SparkStreaming通过Flume获取数据(单机,push和poll两种方式)的实现
- springMVC参数的传递方式(1.通过@PathVariabl获取路径参数,2.@ModelAttribute获取数据,3.HttpServletRequest取参,4@RequestParam)
- HttpClient通过Post方式发送Json数据
- Hibernate中通过HQL/JPQL查询的方式实现动态数据获取
- C#通过API获取接收数据窗体控件句柄,并向该句柄发送文本信息
- Servlet 通过表单上传文件和获取表单数据的最简单方式
- iOS 通过URL网络获取XML数据的两种方式
- C#中如何通过HTTP协议的不同请求方式获取数据
- CheckboxSelectionModel 几种获取值的方式,以及record数据通过combo来转换
- Winsock:获取UDP数据发送端的IP地址和端口号
- JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据
- 用 AFNetworking 通过 POST 方式发送数据