Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108246
  • 博文数量: 74
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 757
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-20 22:42
个人简介

相信生命中的无限潜能

文章分类

全部博文(74)

文章存档

2016年(1)

2015年(30)

2014年(30)

2013年(13)

我的朋友

分类: C/C++

2014-02-25 15:12:23


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. /* socket建立服务器的文件描述符
  9.  * bind把IP地址与端口设置到文件描述符中
  10.  * listen根据客户连接的不同IP与端口,负责生产对应的文件描述符及其信息
  11.  * accept一旦listen有新的描述符产生,返回,否则阻塞.
  12.  */
  13. int main()
  14. {
  15.     int serverfd;/*描述符*/
  16.     int cfd;/*临时存放 */
  17.     struct sockaddr_in sadr;
  18.     struct sockaddr_in cadr;/**/
  19.     int r;
  20.     char buf[1024];
  21.     socklen_t len;
  22.     /*socket*/
  23.     serverfd=socket(AF_INET,SOCK_STREAM,0);
  24.     if(serverfd==-1)printf("serverfd err :%m\n"),exit(-1);
  25.     printf("建立服务器socket成功\n");
  26.     /*bind*/
  27.     sadr.sin_family=AF_INET;
  28.     sadr.sin_port=htons(9999);
  29.     inet_aton("192.168.1.162",&sadr.sin_addr);/*inet_aton()是一个改进的方法来将一个字符串IP地址转
  30. 换为一个32位的网络序列IP地址*/
  31.     r=bind(serverfd,(struct sockaddr*)&sadr,sizeof(sadr));
  32.     if(r==-1)printf("bind err:%m\n"),exit(-1);
  33.     printf("bind OK!\n");

  34.     /*listen创建一个套接口并监听申请的连接.*/
  35.     r=listen(serverfd,10);
  36.     if(r==-1)printf("3:%m\n"),exit(-1);
  37.     printf("listen OK!\n");
  38.     /*accept在一个套接口接受一个连接*/
  39.         len=sizeof(cadr);/*指向存有addr地址长度的整型数*/
  40.         cfd=accept(serverfd,(struct sockaddr*)&cadr,&len);
  41.         printf("有人连接:%d,IP:%s:%u\n",cfd,inet_ntoa(cadr.sin_addr),ntohs(cadr.sin_port));
  42.         /*ntohs将一个无符号短整形数从网络字节顺序转换为主机字节顺序。*/
  43.     /*将一个IP转换成一个互联网标准点分格式的字符串*/


  44.     /*处理代理客户描述符号的数据*/
  45.     /*recvfrom函数用于从(已连接)套接口上接收数据,并捕获数据发送源的地址*/
  46.     r=recvfrom(cfd,buf,1020,0,0,0);
  47.     if(r>0)
  48.     {
  49.         buf[r]=0;
  50.         printf("::%s\n",buf);
  51.     }
  52.     if(r==0)
  53.     {
  54.         printf("连接断开!\n");
  55.     }
  56.     if(r==-1)
  57.     {
  58.         printf("网络故障!\n");
  59.     }
  60.     return 0;
  61. }
执行结果:
[root@os 10dir]# ./a.out
建立服务器socket成功
bind OK!
listen OK!
有人连接:4,IP:192.168.1.112:60990
::GET / HTTP/1.1
Host: 192.168.1.162:9999
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8


[root@os 10dir]#



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

上一篇:accept和listen

下一篇:文件传送

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