server_delay.c
上传用户:gzxinfenfa
上传日期:2015-02-06
资源大小:279k
文件大小:2k
源码类别:

ICQ弱点检测代码

开发平台:

Visual C++

  1. /* 服务器处理延时
  2.  * 用法:
  3.  *   ./server port delay_seconds &
  4.  */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <sys/socket.h>
  9. #include <netinet/in.h>
  10. #include <arpa/inet.h>
  11. #include <unistd.h>
  12. #include <sys/types.h>
  13. #define MAXDATASIZE 128
  14. #define BACKLOG 5
  15. int main(int argc,char **argv){
  16. int sockfd,new_fd,nbytes,sin_size;
  17. char buf[MAXDATASIZE];
  18. struct sockaddr_in srvaddr,clientaddr;
  19. unsigned short port;
  20. int on=1;
  21.     int delay = 3;
  22. if(argc!=3){
  23. printf("usage:%s port delayn", argv[0]);
  24. return 1;
  25. }
  26. port = atoi(argv[1]);
  27. delay = atoi(argv[2]);
  28. if( delay < 0 )
  29. {
  30. printf("Delay time should great than 0.n");
  31. return 1;
  32. }
  33. //1.创建网络端点
  34. sockfd=socket(AF_INET,SOCK_STREAM,0);
  35. if(sockfd == -1){
  36. perror("can't create socketn");
  37. exit(1);
  38. }
  39. setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
  40. //填充地址
  41. bzero(&srvaddr,sizeof(srvaddr));
  42. srvaddr.sin_family = AF_INET;
  43. srvaddr.sin_port = htons(port);
  44. srvaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  45. //2.绑定服务器地址和端口
  46. if(bind(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr))==-1){
  47. perror("bind errorn");
  48. exit(1);
  49. }
  50. //3. 监听端口
  51. if(listen(sockfd,BACKLOG)==-1){
  52. perror("listen errorn");
  53. exit(1);
  54. }
  55. for(;;){ //循环/迭代式服务器
  56. //4.接受客户端连接
  57. sin_size = sizeof(struct sockaddr_in);
  58. new_fd = accept(sockfd,(struct sockaddr *)&clientaddr,&sin_size);
  59. if(new_fd == -1){
  60. perror("accept error:");
  61. printf("Server abort.n");
  62. break;
  63. }
  64. printf("Server>> client addr:%s %dn",
  65. inet_ntoa(clientaddr.sin_addr),
  66. ntohs(clientaddr.sin_port));
  67. //5.接收请求
  68. nbytes = read(new_fd,buf,MAXDATASIZE);
  69. buf[nbytes]='';
  70. printf("Server>> client:%sn",buf);
  71. sleep(delay);  // 模拟延时
  72. //6.回送响应
  73. sprintf(buf,"welcome!");
  74. write(new_fd,buf,strlen(buf));
  75. //关闭socket
  76. close(new_fd);
  77. }
  78. close(sockfd); // 关闭用来监听的socket
  79. return 0;
  80. }