北京摇号网站维护,.net制作网站开发教程,山西企业建站系统平台,linux 安装wordpressUDP服务器的实现流程#xff1a;一、创建用户数据报套接字#xff08;socket函数#xff09;#xff1a;通信域选择IPV4网络协议、套接字类型选择数据报式#xff1b; int sockfd socket(AF_INET,SOCK_DGRAM,0); 二、填充服务器的网络信息结构体#xff1a;1.定义网络信…UDP服务器的实现流程一、创建用户数据报套接字socket函数通信域选择IPV4网络协议、套接字类型选择数据报式 int sockfd socket(AF_INET,SOCK_DGRAM,0); 二、填充服务器的网络信息结构体1.定义网络信息结构体变量2.求出结构体变量的内存空间大小3.结构体清零4.使用IPV4网络协议5.预留给在终端输入的网络字节序的端口号6.预留给在终端输入的IP地址 struct sockaddr_in serveraddr; //定义网络信息结构体变量socklen_t serveraddrlen sizeof(serveraddr);//求出结构体变量的内存空间大小memset(serveraddr,0,serveraddrlen); //结构体清零serveraddr.sin_family AF_INET; //使用IPV4网络协议serveraddr.sin_addr.s_addr inet_addr(argv[1]); //IP地址serveraddr.sin_port htons(atoi(argv[2])); //网络字节序的端口号三、套接字和服务器的网络信息结构体进行绑定bind函数 int ret bind(sockfd,(struct sockaddr *)serveraddr,serveraddrlen);四、接收来自客户端的数据recvfrom函数和给客户端发送应答消息sendto函数 int ret1 recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)clientaddr,clientaddrlen);strcat(buf,------------k);int ret2 sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)clientaddr,clientaddrlen);五、关闭套接字close函数 close(sockfd);综合应用实例代码如下所示
//UDP服务器#include stdio.h
#include sys/types.h
#include sys/socket.h
#include stdlib.h
#include netinet/in.h
#include netinet/ip.h
#include string.h
#include arpa/inet.h
#include unistd.h#define ERRLOG(msg) do{\printf(%s:%s:%d\n, __FILE__, __func__, __LINE__);\perror(msg);\exit(-1);\}while(0)int main(int argc, const char *argv[])
{//入参合理性检查if(3 ! argc){printf(Usage : %s IP port\n, argv[0]);exit(-1);}//创建用户数据报套接字int sockfd socket(AF_INET,SOCK_DGRAM,0);if(-1 sockfd){ERRLOG(socket error);}//填充服务器网络信息结构体struct sockaddr_in serveraddr;socklen_t serveraddrlen sizeof(serveraddr);memset(serveraddr,0,serveraddrlen);serveraddr.sin_family AF_INET;serveraddr.sin_addr.s_addr inet_addr(argv[1]);serveraddr.sin_port htons(atoi(argv[2]));//将套接字与服务器网络信息结构体绑定if(-1 bind(sockfd,(struct sockaddr *)serveraddr,serveraddrlen)){ERRLOG(bind error);}//定义新的结构体保存来自客户端信息struct sockaddr_in clientaddr;socklen_t clientaddrlen sizeof(clientaddr);memset(clientaddr,0,clientaddrlen);//收发数据char buf[128] {0};while(1){memset(buf,0,sizeof(buf));if(-1 recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)clientaddr,clientaddrlen)){ERRLOG(recvfrom error);}printf(客户端[%s:%d]发来数据[%s]\n,inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port),buf);//组装应答消息strcat(buf,------------k);if(-1 sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)clientaddr,clientaddrlen)){ERRLOG(sendto error);}}//关闭套接字close(sockfd);return 0;
}本示例代码仅供参考