⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udpserver.c

📁 Linux下网络编程中UDP服务器端的简单代码
💻 C
字号:
/************************* 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -