赛迪网 > IT技术 C/C++ > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

unix下编写socket程序的一般步骤 (2)

发布时间:2006.01.17 05:54     来源:赛迪论坛    作者:章永阳

3.一个完整的程序

  #include 
  #include 
  #include /*包含有htons等函数的头文件*/

  #include 
  #include 

  void main()
   {
    int listenfd,clifd;
    long pid;
    struct sockaddr_in myaddr,cliaddr;

    int ret;
    int len;

    listenfd=socket(AF_INET,SOCK_STREAM,0);
    if (listenfd<0)
     {
      perror("socket error");
      exit(-1);
     }

    myaddr.sin_family=AF_INET;
    myaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    myaddr.sin_port=htons(8888);

    ret=bind(listenfd,(struct sockaddr *)&myaddr,sizeof(myaddr));
    if (ret<0)
     {
      perror("bind error");
      exit(-1);
     }
    listen(listenfd,10);
    len=sizeof(struct sockaddr);
    while(1)
     {
      clifd=accept(listenfd,(struct sockaddr*)&cliaddr,&len);
       /*注意accept的第三个参数也是地址*/
      if(clifd==-1)
       {
        perror("accept error");
        continue;
        }
      printf("connect from %s %d\n",inet_ntoa(cliaddr.sin_addr.s_addr),
ntohs(cliaddr.sin_port));

      switch(pid=fork())
       {
        case 0: /*子进程*/
           close(listenfd);
           ;/*子进程进行其他的操作*/
           close(clifd);
           exit(0);
           break;
        case -1:
           perror("fork error");
           break;
           default:/*父进程*/
           close(clifd);
           break;

        }
       }

      }

4.程序说明

该程序的功能是监听8888端口的连接,对所有的对8888端口的连接显示出地址和对方的端口号该程序在sco unix下调试通过,在其他unix和linux平台请注意inet_ntoa,htons函数所应在的头文件的名称

同时该程序用到了并发的观点,因为accept,read,write均为阻塞(block)的函数,一旦进程block将不能处理其他请求,所以用主进程进行listen,由子进程进行负责对客户端传输数据.

你可以在同一台unix机器用telnet localhost 8888进行观察程序会输出connect from 127.0.0.1 xxxx
(e129)

<<上一页 1 2


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Unix下安装网卡驱动一招 (12-17) · 让Unix文件系统实现无人职守维护 (12-20)
· 合理配置Squid (12-16) · 在UNIX下让ORACLE定时执行*.sql文件 (11-11)
· 利用Delphi编写Socket通信程序 (11-04) · 比尔学Java:Java Socket篇 (09-28)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管