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 ”); //判断是否创建成功
}
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 ”); //错误检测
}
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 ”, 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 ”); //错误检测
}
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 ”); //错误检测
}
return 0;
}