Window下UDP(socket)接和收数据案例
2020-12-13 06:16
标签:des style blog http color 使用 os io
配置QT的环境变量,这台电脑à属性à高级系统设置à高级à环境变量à系统变量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\QtCreator\bin
创建一个QT项目:winAndLinuxMyUdpProject项目
修改QT的项目文件,修改winAndLinuxMyUdpProject.pro文件:
注意,这的的:LIBS+=
-lWs2_32 ##标示使用window下的Ws2_32.lib,-l表示要链接后面的库 4.编写头文件:udp.h #ifndefUDP_H #defineUDP_H //明确的告诉C++编译器,这是一个用C语言编译的函数,你就不要把函数名 //转化为C++格式了 //因为C++的编译器位了方法的重载,会修改方法的名称,如果最终的文件时 //C++为后缀的,那么就不需要加上下面一句了 extern"C" //这里是C++的关键字 { intsocket_send(constchar*IP); intsocket_recv(); } #endif//UDP_H 5.编写头文件的实现函数 #include #include #include /*接收ip地址*/ intsocket_send(constchar*IP) { //初始化socket DWORDver; WSADATAwsaData; //在调用WSAStatrtup要告诉windows,我用什么版本的socket ver=MAKEWORD(1,1); //windows要求,只要用socket,第一步必须调用这个函数 WSAStartup(ver,&wsaData); //初始化socket完成 //建立一个socket,第一个参数是指定socket要用那个协议,AF_INET //代表要用TCP/IP协议 //第三个参数SOCK_DGRAM意思是要用UDP协议 //第三个参数一般默认值填0 SOCKETst=socket(AF_INET,SOCK_DGRAM,0);//定义一个socket structsockaddr_inaddr; memset(&addr,0,sizeof(addr));//初始化结构addr; addr.sin_family=AF_INET;//代表要使用一个TCP/IP的地址 addr.sin_port=htons(8080);//hosttonetshort addr.sin_addr.s_addr=inet_addr(IP); charbuf[1024]={0}; size_trc=0; while(1) { memset(buf,0,sizeof(buf)); gets(buf); if(buf[0]==‘0‘)//做为还原的退出条件 break; //发送udp数据 rc=sendto(st,buf,strlen(buf),0,(structsockaddr *)&addr,sizeof(addr)); } closesocket(st);//使用完socket要将其关闭 WSACleanup();//释放winsocket内部的相关资源 returnrc; } intsocket_recv() { //初始化socket DWORDver; WSADATAwsaData; //在调用WSAStatrtup要告诉widnows,我用什么版本的socket ver=MAKEWORD(1,1); //Windows要求,只要用Socket,第一步必须调用这个函数 WSAStartup(ver,&wsaData); //初始化socket完成 //建立一个socket,第一个参数是指定socket要用那个协议,AF_INET代表要用TCP/IP协议 //第二个参数SOCK_DGRAM意思是要用UDP协议 //第三个参数一般默认填0 SOCKETst=socket(AF_INET,SOCK_DGRAM,0); //定义一个socket structsockaddr_inaddr; memset(&addr,0,sizeof(addr)); //初始化结构addr addr.sin_family=AF_INET;//代表要使用一个TCP/IP的地址 addr.sin_port=htons(8080);//hosttonetshort addr.sin_addr.s_addr=htonl(INADDR_ANY);//做为接收方,不需要指定具体的IP地址,接收的主机是什么IP,我就在什么IP上收数据 intrc=0; //将端口号和程序绑定 if(bind(st,(structsockaddr*)&addr,sizeof(addr))>-1) { charbuf[1024]={0}; structsockaddr_insendaddr; memset(&sendaddr,0,sizeof(sendaddr)); intlen=sizeof(sendaddr); while(1) { memset(buf,0,sizeof(buf)); //接收udp数据 rc=recvfrom(st,buf,sizeof(buf),0, (structsockaddr*)&sendaddr,&len); printf("%s\n",buf); } } closesocket(st);//使用完socket要将其关闭 WSACleanup(); //释放win_socket内部的相关资源 returnrc; } Window下UDP(socket)接和收数据案例,搜素材,soscw.com Window下UDP(socket)接和收数据案例 标签:des style blog http color 使用 os io 原文地址:http://blog.csdn.net/tototuzuoquan/article/details/38459079
6.编写main.c
#include
#include "udp.h"
using namespace std;
int main(int argc, char *args[])
{
//这一句说明当参数的个数大于1的时候发送消息
if (argc > 1)
{
socket_send(args[1]); //
}
else
{
//表示接收消息
socket_recv();
}
return 0;
}
7.运行项目,项目截图如下:
A:先打开cmd窗口用于接收,进入项目winAndLinuxMyUdpProject.exe所在位置:
G:\QT\build-winAndLinuxMyUdpProject-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\
B:打开cmd窗口用于发送:
下面是接收窗口:
下面是发送窗口:
8.额外添加:
A:gcc编译过程:
B:对于C语言来讲,编译完成之后函数的名称不会改变,对于C++来讲,函数的名称发生改变,如果C代码中的函数,在C++中使用一定要用extern “C”关键字来说明。
C:在unix下so文件一定要以lib开头,以so结尾