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

📄 prg14_1.c

📁 unix网络编程技术与分析.rar unix网络编程的资料
💻 C
字号:
// File: prg14_1.c
 #include <stdio.h>          /* These are the usual header files */ 
 #include <strings.h>          /* for bzero() */
 #include <unistd.h>         /* for close() */
 #include <sys/types.h> 
 #include <sys/socket.h> 
 #include <netinet/in.h> 
 #include <arpa/inet.h>

 #define PORT 1234   /* Port that will be opened */ 
 #define BACKLOG 2   /* Number of allowed connections */  
 void process_cli(int connectfd, sockaddr_in client);

 main() 
 { 
 int listenfd, connectfd; /* socket descriptors */ 
 pid_t pid;
 struct sockaddr_in server; /* server's address information */ 
 struct sockaddr_in client; /* client's address information */ 
 int sin_size; 

 /* creaet TCP socket  */
 if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
 {
   /* handle exception */
   perror("Creating socket failed.");
   exit(1);
 }

 bzero(&server,sizeof(server));
 server.sin_family=AF_INET; 
 server.sin_port=htons(PORT); 
 server.sin_addr.s_addr = htonl (INADDR_ANY); 

 if (bind(listenfd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1) { 
   /* handle exception */
   perror("Bind error.");
   exit(1); 
   }    

 if(listen(listenfd,BACKLOG) == -1){  /* calls listen() */ 
   perror("listen() error\n"); 
   exit(1); 
   } 

 sin_size=sizeof(struct sockaddr_in); 
 while(1)
 {
   /* accept connection */
   if ((connectfd = accept(listenfd,(struct sockaddr *)&client,&sin_size))==-1) {
     perror("accept() error\n"); 
     exit(1); 
     } 

   /*  create child process */
   if ((pid=fork())>0) {
     /* parent process */
     close(connectfd);
     continue;
   }
   else if (pid==0) {
     /* child process */
     close(listenfd);
     process_cli(connectfd, client);
     exit(0);     
   }
   else {
     printf("fork error\n");
     exit(0);
   }
 }

 close(listenfd);   /* close listenfd */         
 } 

 void process_cli(int connectfd, sockaddr_in client)
 {
 sockaddr_in address;
 int namelen;

 getsockname(connectfd,  (sockaddr  *)&address,  &namelen);
 printf("Connected to address ( %s )\n  ",inet_ntoa(address.sin_addr) ); 
 close(connectfd); /*  close connectfd */ 
 }



⌨️ 快捷键说明

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