Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110139
  • 博文数量: 50
  • 博客积分: 968
  • 博客等级: 少尉
  • 技术积分: 492
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-17 09:51
文章分类

全部博文(50)

文章存档

2012年(2)

2011年(48)

我的朋友

分类: LINUX

2011-05-17 16:36:14



  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<errno.h>
  4. #include<string.h>
  5. #include<sys/types.h>
  6. #include<netinet/in.h>
  7. #include<sys/socket.h>
  8. #include<sys/wait.h>

  9. #define PORT 3333 //服务器监听端口号
  10. #define BACKLOG 10 //最大同时连接请求数

  11. int main()
  12. {
  13.     int sockfd; /*监听socket*/
  14.     int client_fd; /*数据传送socket*/
  15.     struct sockaddr_in my_addr; /*本机地址信息*/
  16.     struct sockaddr_in remote_addr; /*客户端地址信息*/
  17.     int sin_size;
  18.     /*
  19.      socket(int domain,int type,int protocol)
  20.      domain:
  21.         AF_INET :Ipv4 协议
  22.         AF_INET6:Ipv6 协议
  23.         ……
  24.      type:
  25.         SOCK_STREAM: 字节数据流套接字
  26.         SOCK_DGRAM: 数据包套接字
  27.         SOCK_RAW: 原始套接字
  28.      protocol:
  29.         设置为 0 表示自动选择
  30.     */
  31.     sockfd = socket(AF_INET,SOCK_STREAM,0);
  32.     if(sockfd == -1)
  33.     {
  34.         perror("socket create error!");
  35.         exit(1);
  36.     }
  37.     my_addr.sin_family = AF_INET;
  38.     /*htons()函数把主机字节序转换成网络字节序*/
  39.     my_addr.sin_port = htons(PORT);
  40.     my_addr.sin_addr.s_addr = INADDR_ANY; /*????*/
  41.     bzero(my_addr.sin_zero,8);
  42.     /*
  43.      int bind(int sockfd,struct sockaddr* my_addr,int addrlen)
  44.      sockfd:
  45.         socket()函数返回的socket描述符
  46.      my_addr:
  47.         指向包含本机ip及端口号等信息的sockaddr类型的指针
  48.      addrlen:
  49.         sockaddr结构体长度
  50.     */
  51.     int bindret = bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr));

  52.     if(bindret == -1)
  53.     {
  54.         perror("bind error!");
  55.         exit(1);
  56.     }
  57.     
  58.     int listenret = listen(sockfd,BACKLOG);
  59.     
  60.     if(listenret == -1)
  61.     {
  62.         perror("listen error!");
  63.         exit(1);
  64.     }
  65.     while(1)
  66.     {
  67.         sin_size = sizeof(struct sockaddr_in);

  68.         client_fd = accept(sockfd,(struct sockaddr*)&remote_addr,&sin_size);

  69.         if(client_fd == -1)
  70.         {
  71.             perror("accept error!");
  72.             continue;
  73.         }
  74.         printf("receve a connect from : %s\n",inet_ntoa(remote_addr.sin_addr));
  75.         
  76.         if(!fork())
  77.         {
  78.             /*子进程代码段*/
  79.             /*
  80.              int send(int sockfd,const void *msg,int len,int flags);
  81.             */
  82.             int send_ret = send(client_fd,"Connected succeed!",26,0);
  83.             
  84.             if(send_ret == -1)
  85.             {
  86.                 perror("send error!");
  87.             }
  88.             close(client_fd);
  89.             exit(0);
  90.         }
  91.         
  92.         close(client_fd);
  93.     }

  94. }



阅读(999) | 评论(0) | 转发(0) |
0

上一篇:中断

下一篇:Socket_client(TCP)

给主人留下些什么吧!~~