学习Linux网络编程(转载,很不错的入门文章)

学习Linux网络编程(转载,很不错的入门文章)并发服务器:UDP服务器  人们把并发的概念用于UDP就得到了并发UDP服务器模型. 并发UDP服务器模型其实是简单的.和并发的TCP服务器模型一样是创建一个子进程来处理的 算法和并发的TCP模型一样. 除非服务器在处理客户端的请求所用的时间比较长以外,人们实际上很少用这种模型. 9.6 一个并发TCP服务器实例 #include  #include  #include  #include  #include  #define MY_PORT 8888 int main(int argc ,char **argv)  {  int listen_fd,accept_fd;  struct sockaddr_in client_addr;  int n; if((listen_fd=socket(AF_INET,SOCK_STREAM,0))<0)  {  printf("Socket Error:%s/n/a",strerror(errno));  exit(1);  } 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));  if(bind(listen_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))<0)  {  printf("Bind Error:%s/n/a",strerror(errno));  exit(1);  }  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);  write(accept_fd,buffer,n);  close(accept_fd);  exit(0);  }  else if(n<0)  printf("Fork Error:%s/n/a",strerror(errno));  close(accept_fd);  }  } 你可以用我们前面写客户端程序来调试着程序,或者是用来telnet调试

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender