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

📄 server.c

📁 一个linux网络开发的示例
💻 C
字号:
#include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <string.h>#include <stdio.h>#include <stdlib.h>#include <errno.h> #define MY_PORT 8888 int main(int argc ,char **argv) { 	int listen_fd,accept_fd; 	struct sockaddr_in client_addr; 	int n; 	/* 服务器端开始建立socket描述符 */ 	if((listen_fd=socket(AF_INET,SOCK_STREAM,0))<0) 	{ 		printf("Socket Error:%s\n\a",strerror(errno)); 		exit(1); 	} 	/* 服务器端填充 sockaddr结构 */ 	bzero(&client_addr,sizeof(struct sockaddr_in)); 	client_addr.sin_family=AF_INET; 	client_addr.sin_port=htons(MY_PORT); 	client_addr.sin_addr.s_addr=htonl(INADDR_ANY); 	n=1; 	/* 如果服务器终止后,服务器可以第二次快速启动而不用等待一段时间 */ 	setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(int)); // SO_REUSEADDR允许重用本地地址和端口	/* 捆绑sockfd描述符 */ 	if(bind(listen_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))<0) 	{ 		printf("Bind Error:%s\n\a",strerror(errno)); 		exit(1); 	} 	/* 监听sockfd描述符 */ 	listen(listen_fd,5); 	while(1) 	{ 		/* 服务器阻塞,直到客户程序建立连接 */ 		accept_fd=accept(listen_fd,NULL,NULL); 		if((accept_fd<0)&&(errno==EINTR)) 			continue; 		else if(accept_fd<0) 		{ 			printf("Accept Error:%s\n\a",strerror(errno)); 			continue; 		} 		if((n=fork())==0) 		{ 			/* 子进程处理客户端的连接 */ 			char buffer[1024]; 			close(listen_fd); 			n=read(accept_fd,buffer,1024); // 从文件accept_fd读取1024字节到buffer缓冲区			write(accept_fd,buffer,n);     // 从buffer缓冲区写n字节到文件accept_fd			close(accept_fd); 			exit(0); 		} 		else if(n<0) 			printf("Fork Error:%s\n\a",strerror(errno)); 		close(accept_fd); 	} } 

⌨️ 快捷键说明

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