udpserver.c

来自「Linux下网络编程中UDP服务器端的简单代码」· C语言 代码 · 共 96 行

C
96
字号
/************************* File Info ******************************** File name:           server.c** Descriptions:        server of UDP.*********************************************************************************************************/#include <unistd.h> #include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <fcntl.h> #include <sys/types.h>#include <sys/stat.h> #include <netinet/in.h>#include <sys/wait.h>#include <arpa/inet.h>           #include <sys/socket.h>                                  #define PORT 4567            #define LENGTH  1024                                                                            int main(int argc, char *argv[]){	int    sockfd,numbytes,read_bytes;                                   socklen_t    addrlen;  	int    fd;                       char   buf[LENGTH];  	char   msg[LENGTH+1];               struct sockaddr_in addr_sev;   	struct sockaddr_in addr_cli;	/*  检查参数 */   if (argc != 2){                               printf("please input file dirctory!\n");     exit(1);         }       	if((fd=open(argv[1],O_RDONLY)) < 0){           //加入命令行后,没法读普通文件?!      printf("open file error!\n");      exit(1);           }                	/*  获取Socket文件描述符  */	if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1 ){  		printf ("creat socket error\n");      exit(1);	}        	/*  填充本地Socket地址结构*/	bzero(&addr_sev, sizeof(addr_sev));     addr_sev.sin_family = AF_INET;             addr_sev.sin_port = htons(PORT);            addr_sev.sin_addr.s_addr  = htonl(INADDR_ANY);         	/* 绑定端口*/	if(bind(sockfd, (struct sockaddr*)&addr_sev, sizeof(struct sockaddr)) == -1 ){		printf ("Failed to bind Port %d.\n",PORT);      exit(1);	}	addrlen = sizeof(struct sockaddr_in);	printf("Please wait......\n");		while(1){	  				read_bytes=read(fd,buf,LENGTH);		//printf("read %d bytes\n",read_bytes);		if(read_bytes < 1){			printf("read file error\n");        //若读取失败,程序结束。			exit(1);		}			if((numbytes = recvfrom(sockfd, msg, LENGTH, 0, (struct sockaddr *)&addr_cli, &addrlen)) == -1){			printf("receive error!\n");			exit(1);   		} 		//printf("get message:%s\n",msg);				if((numbytes=sendto(sockfd, buf, read_bytes, 0, (struct sockaddr *)&addr_cli, sizeof(addr_cli)))==-1){			printf("send data error!\n");			exit(1);		}	//	printf("Send success:total data is %d bytes!\n",numbytes);			if(numbytes != LENGTH){			printf("Data sent complete!\n");			break;		}		//close(sockfd); 		//close(fd); 	}	exit(0);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?