欢迎来到军工软件开发人才培养基地——学到牛牛

UDP简介

时间:2024-05-06 07:01:10 来源:学到牛牛

UDP是网络传输中传输层的协议,是无连接的一种传输协议。在网络传输中主要起到事务的不可靠信息传送服务。

UDP传输可简单理解为以写信的方式将信息发送出去,我们只需要知道对方的IP地址,即可将信息发送过去。但也正是因为只需要对方的IP地址,所以数据传输的方式比较简单,传送的速度也较快。但也因为这种简单的传输方式,就对传送的信息的安全性没有保障,易出现数据丢包的现象,并且在传送多条数据时,对于数据到达的顺序也没有保障,因此往往多用于实验数据的测试方面。

在进行UDP通信的时候,首先就需要确定对象的IP地址,确定IP地址之后,与之绑定,绑定成功之后就可以进行数据传输。在UDP传输中每个代码的功能相对独立。也就是说一个程序只能实现收或发一种功能,一般称发送数据一方为客户端,接收方为服务端。

代码如下:

//服务端代码

#include <stdio.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <sys/types/h>

 

int main()

{

int fd = socket(AF_INET, SOCK_DGRAM,0);   //创建套接字

if(fd < 0)  

{

perror(“error\n”);    //判断是否创建成功

}

 

struct sockaddr_in sock;       //创建结构体

sock.sin_family = AF_INET;      //用于IPV4网络协议族

sock.sin_port = htons(8899);    //连接端口号

sock.sin_addr.s_addr = INADDR_ANY; //设置IP地址的

 

int len = sizeof(sock);     //获取结构体大小

int ret = bind(fd, &sock ,len);     //绑定端口号和IP地址

if(ret < 0)  

{

perror(“bind error\n”);      //错误检测

}

char data[1024] = {0};         //设置变量用于存放接收的数据

struct sockaddr_in send;         //创建新的结构体

int send_len = sizeof(send);        //获取结构体大小

ret = recvfrom(fd, data, sizeof(data), 0, &send, &send_len);         //数据接收

If(ret < 0)

{

perror(“recvfrom error”);     //错误检测

}

printf(“send said:%s\n”, data);

return 0;

}

 

//客户端代码

#include<stdio.h>

#include <netinet.h>

#include <sys/socket.h>

#include <sys/types.h>

 

int main()   

{

int fd = socket(AF_INET, SCOK_DGRAM, 0);     //创建套接字

If(fd < 0)

{

perror(“socket error\n”);         //错误检测

struct sockaddr_in dst;               //创建结构体

dst.sin_family = AF_INET;            //设置为IPV4协议族

dst.sin_port = htons(8899);           //设置端口号

dst.sin_addr.s_addr = inet_addr(“192.168.31.71”);       //设置IP地址

    

char *buf = “hello world”;                //输入发送内容

int len = sizeof(dst);                          

Int ret = 0;                                   

ret = sendto(fd, buf, sizeof(buf), 0, &dst,  &len);         //数据发送

if(ret < 0)

{

perror(“sendto error\n”);         //错误检测

}

    return 0;

}