• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天下

            記錄修行的印記

            linux Socket多路復(fù)用模式服務(wù)端 69.cpp

            // File: 69.cpp
            #include <iostream>
            #include 
            <map>
            #include 
            <stdio.h>
            #include 
            <unistd.h>
            #include 
            <stdlib.h>
            #include 
            <math.h>
            #include 
            <string.h> 
            #include 
            <strings.h>
            #include 
            <sys/types.h> 
            #include 
            <sys/socket.h> 
            #include 
            <netinet/in.h> 
            #include 
            <arpa/inet.h>
            #include 
            <bitset>
            using namespace std;
            #define PORT 1234   /* Port that will be opened */ 
            #define BACKLOG 5   /* Number of allowed connections */ 
            #define MAXDATASIZE 4096  

            typedef map
            <unsigned int,sockaddr_in> connects;
            void process_cli(int sockfd,sockaddr_in addr,char* recvbuf, int len);


            void reverser(char* szIn,char* szOut,unsigned int nLen) 
            {
             
            for (int i=0;i<nLen;i++) {
              szOut[i] 
            = szIn[nLen-i-1];
             }
            }

            int main() 

             connects connect_fds;
             
            int sock_fd;
             ssize_t recv_size;
             fd_set read_set;
             fd_set all_set;
             
            int listen_fd;
             
            int connect_fd;
             
            int ready_size;
             socklen_t addr_size; 
             sockaddr_in srv_addr;
             sockaddr_in addr;
             unsigned 
            int max_fd = 0;
             
            char recv_buf[MAXDATASIZE];

             
            if ((listen_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
              perror(
            "Creating socket failed.");
              exit(
            1);
             }

             
            int opt = SO_REUSEADDR;
             setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, 
            &opt, sizeof(opt));

             bzero(
            &srv_addr,sizeof(srv_addr));
             srv_addr.sin_family
            =AF_INET; 
             srv_addr.sin_port
            =htons(PORT); 
             srv_addr.sin_addr.s_addr 
            = htonl (INADDR_ANY); 
             
            if (bind(listen_fd, (struct sockaddr *)&srv_addr, sizeof(struct sockaddr)) == -1) { 
              perror(
            "Bind error.");
              exit(
            1); 
             }    

             
            if(listen(listen_fd,BACKLOG) == -1) {  
              perror(
            "listen() error\n"); 
              exit(
            1); 
             } 
             max_fd 
            = listen_fd;
             addr_size
            =sizeof(sockaddr_in); 
             
             FD_ZERO(
            &all_set);
             FD_SET(listen_fd, 
            &all_set);

             connects::iterator iter;

             printf(
            "clients:(%u) ,current listen socket:%u\n",connect_fds.size(),listen_fd);
             
            while(1)
             {
              read_set 
            = all_set;
              ready_size 
            = select(max_fd+1&read_set, NULL, NULL, NULL);
              
            if ( FD_ISSET(listen_fd,&read_set) ) {
               connect_fd 
            = accept(listen_fd,(struct sockaddr *)&addr,&addr_size);
               
            if (connect_fd ==-1 ) {
                perror(
            "accept() error\n"); 
                
            continue
               }
               connect_fds[connect_fd]  
            = addr;
               max_fd 
            = connect_fd;
               FD_SET(connect_fd, 
            &all_set);
               printf(
            "clients:(%u) ,%s:%d connected ,connect socket:%u\n",connect_fds.size(),inet_ntoa(addr.sin_addr),ntohs(addr.sin_port),connect_fd);
              }

              
            for ( iter = connect_fds.begin(); iter!=connect_fds.end(); iter++) {
               sock_fd 
            = iter->first;
               addr 
            = iter->second;
               
            if ( FD_ISSET(sock_fd,&read_set) ) {
                recv_size 
            = recv(sock_fd, recv_buf, MAXDATASIZE,0);
                
            if ( recv_size == 0) {
                 close(sock_fd);
                 FD_CLR(sock_fd, 
            &all_set);
                 connect_fds.erase(sock_fd);
                 printf(
            "%s:%d disconnected\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port) );
                } 
                
            else {
                 process_cli(sock_fd,addr,recv_buf,recv_size);
                }
               }
              }
             }
             close(listen_fd);



            void process_cli(int sockfd,sockaddr_in addr,char* recvbuf, int len)
            {
             
            char sendbuf[MAXDATASIZE];
             printf(
            "Received %s:%d message: %s\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port), recvbuf);
             reverser(recvbuf,sendbuf,len);
             printf(
            "Send To  %s:%d message: %s\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port), sendbuf);
             send(sockfd,sendbuf,len,
            0);
            }

            posted on 2011-09-08 16:03 天下 閱讀(493) 評論(0)  編輯 收藏 引用 所屬分類: SocketLinux編程

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            久久精品国产亚洲一区二区三区| 伊人久久精品无码二区麻豆| 久久久免费精品re6| 久久只有这里有精品4| 四虎国产精品成人免费久久| 久久毛片免费看一区二区三区| 国产99久久九九精品无码| 国产Av激情久久无码天堂| 久久国产高清字幕中文| 久久不射电影网| 久久精品国产99久久丝袜| 久久九色综合九色99伊人| 一级a性色生活片久久无| 久久久久亚洲AV无码专区首JN| 无码国内精品久久综合88| 狠狠色丁香久久婷婷综合_中 | 国产精品久久久久久福利漫画| 国产精品久久久久影视不卡| 情人伊人久久综合亚洲| 久久久久亚洲精品无码网址| 精品久久久久成人码免费动漫| 无码国产69精品久久久久网站| 国产精品久久久久久久| 国产毛片久久久久久国产毛片| 亚洲欧美日韩久久精品| 久久久免费精品re6| 精品视频久久久久| 伊人久久综合无码成人网| 天天久久狠狠色综合| 欧美国产成人久久精品| 狠狠色丁香久久婷婷综| 91麻豆国产精品91久久久| 久久99精品综合国产首页| 久久精品综合网| 91精品无码久久久久久五月天 | 亚洲av伊人久久综合密臀性色| 久久ww精品w免费人成| 久久国产精品无| 精品无码人妻久久久久久| 久久亚洲私人国产精品| 午夜精品久久久久|