05_C++/QT|window QT 环境下编写网络程序(一)---简易的UDP收发程序

一、window QT开发环境下UDP手法程序与Linux相比大同小异,都是使用socket机制,本文粗略分析udp 收发端的编写流程
二、应用程序的编写
1.接收端


int socket_recv(void){ printf("recv before socket_recv starting...\n"); //初始化socket DWORD ver; WSADATA WSAData; //在调用WSAStartup要告知Windows要使用什么版本的socket ver = MAKEWORD(1,1); WSAStartup(ver,&WSAData); //Windows 要求,只要使用socket,第一步必须调用这个函数 //初始化socket完成 /** * @brief st * params1: 协议族,指定socket使用哪一个协议族 * params2: 套接字类型,使用协议族中哪一个协议 * params3: 一般默认填写0 */ SOCKET st = socket(AF_INET,SOCK_DGRAM,0); //建立一个socket struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); //初始化addr addr.sin_family = AF_INET; addr.sin_port = htons(8090); addr.sin_addr.s_addr = inet_addr("192.168.1.102"); //addr.sin_addr.s_addr = htonl(INADDR_ANY); //作为接收方,不需要指定具体的IP地址,接受主动的地址 if(bind(st,(struct sockaddr *)&addr,sizeof(struct sockaddr))){ printf("bind error...\n"); return -1; } //当端口号和程序绑定 printf("recv before...\n"); char buf[1024]={0}; struct sockaddr_in src_addr; int len = sizeof(struct sockaddr); memset(buf,0,sizeof(buf)); recvfrom(st,buf,sizeof(buf),0,(struct sockaddr *)&src_addr,&len); printf("buf:%s src_ip:%s\n src_port:%d\n",buf,inet_ntoa(src_addr.sin_addr),ntohs(src_addr.sin_port)); closesocket(st); WSACleanup(); //释放win socket 的相关的资源 return 0; }

【05_C++/QT|window QT 环境下编写网络程序(一)---简易的UDP收发程序】
2.发送端

int socket_send(void){ //初始化socket DWORD ver; WSADATA WSAData; //在调用WSAStartup要告知Windows要使用什么版本的socketver = MAKEWORD(1,1); WSAStartup(ver,&WSAData); //Windows 要求,只要使用socket,第一步必须调用这个函数 //初始化socket完成/** * @brief st * params1: 协议族,指定socket使用哪一个协议族 * params2: 套接字类型,使用协议族中哪一个协议 * params3: 一般默认填写0 */ SOCKET st = socket(AF_INET,SOCK_DGRAM,0); //建立一个socket struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); //初始化addraddr.sin_family = AF_INET; addr.sin_port = htons(8090); addr.sin_addr.s_addr = inet_addr("192.168.1.102"); char buf[1024]={0}; strcpy(buf,"welcome to dhu\n"); size_t rc = sendto(st,buf,strlen(buf)+1,0,(struct sockaddr *)&addr,sizeof(struct sockaddr)); closesocket(st); WSACleanup(); //释放win socket 的相关的资源 return 0; }

3.软件配置
由于Linux中的socket是内置的api接口因此我们在运行的时候,几乎不需要使用链接库。而windows中的socket是外置的api,因此运行之前我们需要配置动态库,如下所示:
在XXX_pro中添加

LIBS += -lWS2_32


4.运行效果
先运行接收端:./myudp.exe 2
再运行发送端:./myudp.exe
接收端的输出如下:

recv before... buf:welcome to dhu src_ip:192.168.1.102 src_port:57676





    推荐阅读