Window下UDP(socket)接和收数据案例

简介:  配置QT的环境变量,这台电脑à属性à高级系统设置à高级à环境变量à系统变量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\QtCreator\bin 创建一个QT项目:winAndLinuxMyUdpProject项目 修改QT的项目文件,修改winAndLinuxMyUd

  1. 配置QT的环境变量,这台电脑à属性à高级系统设置à高级à环境变量à系统变量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\QtCreator\bin

  2. 创建一个QT项目:winAndLinuxMyUdpProject项目

  3. 修改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<winsock2.h> //这里是windows下使用socket需要的文件

#include<stdio.h>

#include<string.h>

 

/*接收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;

}

 
6.编写main.c
#include <iostream>
#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:在unixso文件一定要以lib开头,以so结尾
 
目录
相关文章
|
8月前
|
存储 Python
Python网络编程基础(Socket编程) UDP 发送和接收数据
【4月更文挑战第10天】对于UDP客户端而言,发送数据是一个相对简单的过程。首先,你需要构建一个要发送的数据报,这通常是一个字节串(bytes)。然后,你可以调用socket对象的`sendto`方法,将数据报发送到指定的服务器地址和端口。
|
8月前
|
存储 Python
Python网络编程基础(Socket编程)UDP客户端编程
【4月更文挑战第9天】在UDP通信中,客户端负责发送数据到服务器,并接收来自服务器的响应。与服务器不同,客户端通常不需要绑定到特定的地址和端口,因为它可以临时使用任何可用的端口来发送数据。下面,我们将详细讲解UDP客户端编程的基本步骤。
|
2月前
|
API 网络安全
发送UDP数据免费API接口教程
此API用于向指定主机发送UDP数据,支持POST或GET请求。需提供用户ID、密钥、接收IP及端口、数据内容等参数。返回状态码和信息提示。示例中含公共ID与KEY,建议使用个人凭证以提高调用频率。
50 13
|
6月前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
922 7
|
3月前
|
网络协议 Linux 网络性能优化
Linux基础-socket详解、TCP/UDP
综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。
199 1
|
8月前
|
网络协议 Java
Java的Socket编程:TCP/IP与UDP深入探索
Java的Socket编程:TCP/IP与UDP深入探索
119 0
|
4月前
|
JSON 前端开发 JavaScript
socket.io即时通信前端配合Node案例
本文介绍了如何使用socket.io库在Node.js环境下实现一个简单的即时通信前端配合案例,包括了服务端和客户端的代码实现,以及如何通过socket.io进行事件的发送和监听来实现实时通信。
63 2
|
5月前
|
网络协议 数据格式 Python
python Socket无限发送接收数据方式
Socket是指套接字,是对网络中不同主机上的应用进程之间进行双向通信的端点的一种抽象。 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
|
5月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
4月前
|
网络协议 Linux
TCP 和 UDP 的 Socket 调用
【9月更文挑战第6天】