UDP协议实现服务器
UDP协议的特点:无连接,传输的效率高,但是不安全(可能丢包)
步骤:
- 创建套接字
- 绑定本机的地址
- 接收数据
- 关闭套接字
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main(int argc,char *argv[])
{
//创建套接字
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd>0)
printf("sockfd=%d\n",sockfd);
else
printf("创建失败\n");
//指明本地地址,填充地址结构体
char *my_ip="10.9.71.130";
struct sockaddr_in my_addr;
bzero(&my_addr,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(9000);
inet_pton(AF_INET,my_ip,(void *)&my_addr.sin_addr);
//绑定函数,将填充好的地址结构体和套接字绑定
bind(sockfd,(struct sockaddr*)&my_addr,sizeof(my_addr));
//接收数据,先定义好一个结构体,用来存放发送过来的信息
unsigned char buf[512]="";//接受的信息
struct sockaddr_in src_addr;//发送方地址信息
socklen_t len=sizeof(src_addr);//源地址长度
char src_ip[16]="";//用来保存源地址的ip
ssize_t rcv_len=recvfrom(sockfd,buf,sizeof(buf),0, (struct sockaddr *)&src_addr,&len);
if(rcv_len>0)
{
inet_ntop(AF_INET,&src_addr.sin_addr.s_addr,src_ip,16);
printf("接收到的数据:%s 来自:%s\n",buf,src_ip);
}
else
printf("error\n");
//关闭套接字
close(sockfd);
return 0;
}