科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件unix下编写socket程序的一般步骤

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在unix下写socket程序可能是最方便,你只要掌握其一般步骤,就可以松的写出面向传输层的应用......

作者:章永阳 来源:yesky 2007年10月30日

关键字: Linux

  • 评论
  • 分享微博
  • 分享邮件
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

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章