Chinaunix首页 | 论坛 | 博客
  • 博客访问: 414954
  • 博文数量: 18
  • 博客积分: 128
  • 博客等级: 入伍新兵
  • 技术积分: 152
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-02 15:05
文章分类
文章存档

2012年(10)

2011年(8)

我的朋友

分类: LINUX

2011-11-25 13:11:30

服务器端程序,可服务多个客户
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <stdio.h>
  4. #include <netinet/in.h>
  5. #include <signal.h>
  6. #include <unistd.h>
  7. #include <stdlib.h>

  8. int main()
  9. {
  10.     int server_sockfd, client_sockfd;
  11.     int server_len, clinet_len;
  12.     struct sockaddr_in server_address;
  13.     struct sockaddr_in client_address;
  14.     
  15.     server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
  16.     
  17.     server_address.sin_family = AF_INET;
  18.     server_address.sin_addr.s_addr = htonl(INADDR_ANY);
  19.     server_address.sin_port = htons(9734);
  20.     server_len = sizeof(server_address);
  21.     
  22.     bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
  23.     
  24.     //创建一个连接队列,忽略子进程的退出细节,等待客户的到来
  25.     listen(server_sockfd, 5);    
  26.     
  27.     signal(SIGCHLD, SIG_IGN);
  28.     
  29.     while(1)
  30.     {
  31.         char ch;
  32.         printf("server waiting\n");
  33.         
  34.         //接受连接
  35.         client_len = sizeof(client_address);
  36.         client_sockfd = accept(server_sockfd, (struct sockaddr*)&client_address, &client_len);
  37.         
  38.         //通过fork调用为这个客户创建一个子进程,然后测试你是在父进程中还是子进程中
  39.         if(fork()==0)    //如果在子进程中,就可以对client_sockfd的客户进程读写操作
  40.         {
  41.             read(client_sockfd, &ch, 1);
  42.             sleep(5);    //仅为了演示
  43.             ch++;
  44.             write(client_sockfd, &ch, 1);
  45.             close(client_sockfd);
  46.             exit(0);
  47.         }
  48.         else            //在父进程中,需要关闭这个客户
  49.             close(client_sockfd);
  50.     }
  51. }
 
客户端程序
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <stdio.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <unistd.h>
  7. #include <stdlib.h>

  8. int main()
  9. {
  10.     int sockfd;
  11.     int len;
  12.     struct sockaddr_in address;
  13.     int result;
  14.     char ch = 'A';
  15.     
  16.     //创建套接字
  17.     sockfd = socket(AF_INET, SOCK_STREAM, 0);
  18.     
  19.     address.sin_family = AF_INET;
  20.     address.sin_addr.s_addr = inet_addr("219.223.242.244");
  21.     address.sin_port = htons(9734);
  22.     len = sizeof(address);
  23.     
  24.     //将创建的套接字连接到服务器套接字
  25.     result = connect(sockfd, (struct sockaddr *)&addresss, len);
  26.     if(result==-1)
  27.     {
  28.         perror("oops: client1");
  29.         exit(1);
  30.     }
  31.     
  32.     write(sockfd, &ch, 1);
  33.     read(sockfd, &ch, 1);
  34.     printf("char from server = c%\n",ch);
  35.     close(sockfd);
  36.     exit(0);
  37. }
注:以上程序均摘自《Linux程序设计》
阅读(2409) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~