• <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多線程模式服務(wù)端Demo 64.cpp

            // File: 64.cpp
            //g++ -o 64 64.cpp -lpthread
            //客戶端代碼 62.cpp
            #include <stdio.h>
            #include 
            <unistd.h>
            #include 
            <stdlib.h>
            #include 
            <string.h> 
            #include 
            <strings.h>
            #include 
            <sys/types.h> 
            #include 
            <sys/socket.h> 
            #include 
            <netinet/in.h> 
            #include 
            <arpa/inet.h>
            #include 
            <pthread.h>


            #define PORT 1234   /* Port that will be opened */ 
            #define BACKLOG 5   /* Number of allowed connections */ 
            #define MAXDATASIZE 4096  

            void process_cli(int connectfd,struct sockaddr_in client);

            /* function to be executed by the new thread */
            void* start_routine(void* arg);
            struct  ARG  {
             
            int connfd;
             sockaddr_in client;  
            };

            int main() 

             
            int listenfd, connectfd; /* socket descriptors */ 
             pthread_t  thread;
             ARG 
            *arg;
             
            struct sockaddr_in server; /* server's address information */ 
             
            struct sockaddr_in client; /* client's address information */ 
             socklen_t sin_size; 

             
            /* Create TCP socket */
             
            if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
              
            /* handle exception */
              perror(
            "Creating socket failed.\n");
              exit(
            1);
             }

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

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

             
            if(listen(listenfd,BACKLOG) == -1){  /* calls listen() */ 
              perror(
            "listen() error\n"); 
              exit(
            1); 
             } 

             sin_size
            =sizeof(struct sockaddr_in); 
             
            while(1)
             {
              
            /* Accept connection */
              
            if ((connectfd = accept(listenfd,(struct sockaddr *)&client,&sin_size))==-1) {
               perror(
            "accept() error\n"); 
               exit(
            1); 
              } 
              
            /*  Create thread*/

              arg 
            = new ARG;
              arg
            ->connfd = connectfd;
              memcpy((
            void *)&arg->client, &client, sizeof(client));

              
            if (pthread_create(&thread, NULL, start_routine, (void*)arg)) {
               
            /* handle exception */
               perror(
            "Pthread_create() error");
               exit(
            1);
              }
             }
             close(listenfd);   
            /* close listenfd */         


            void process_cli(int connectfd, struct sockaddr_in client)
            {
             
            int num;
             
            char recvbuf[MAXDATASIZE], sendbuf[MAXDATASIZE];

             
            /* prints client's IP */ 
             printf(
            "%s:%d Client was connected\n",inet_ntoa(client.sin_addr), ntohs( client.sin_port) );

             
            while (1) {
              num 
            = recv(connectfd, recvbuf, MAXDATASIZE,0);
              
            if (num == 0) {
               close(connectfd);
               printf(
            "%s:%d Client was disconnected \n",inet_ntoa(client.sin_addr), ntohs( client.sin_port) );
               
            break;
              }
              
            if (num == -1) {
               perror(
            "recv() error\n"); 
               
            break;
              }
              printf(
            "recvbuf[0]:%d,recvbuf[num-1]:%d,num:%d\n",recvbuf[0],recvbuf[num-1],num);
              recvbuf[num] 
            = '\0';
              printf(
            "Received message From Client : %s\n",recvbuf);
              
            for (int i = 0; i < num; i++) {
               sendbuf[i] 
            = recvbuf[num-i-1];
               
            //printf("sendbuf[%d]:%d\n",i,sendbuf[i]);
              }
              
            //printf("sendbuf[0]:%d,sendbuf[num-1]:%d,num:%d\n",sendbuf[0],sendbuf[num-1],num);
              send(connectfd,sendbuf,num,0); /* send to the client welcome message */ 
             }
             close(connectfd); 
            /*  close connectfd */ 
            }

            void* start_routine(void* arg)
            {
             ARG 
            *info;
             info 
            = (ARG *)arg;

             
            /* handle client’s requirement */
             process_cli(info
            ->connfd, info->client);

             delete (ARG
            *)arg;
             pthread_exit(NULL);
            }

             

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

            <2015年12月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評(píng)論

            思思久久99热只有频精品66| 久久伊人中文无码| 欧美黑人激情性久久| 麻豆亚洲AV永久无码精品久久| 99久久国产宗和精品1上映| 国内精品久久久久影院日本 | 国产精品视频久久久| 久久久久久免费一区二区三区| 久久亚洲欧美日本精品| 精品久久人人妻人人做精品| 久久婷婷五月综合97色直播| 99久久免费国产精品热| 欧美麻豆久久久久久中文| 精品国产青草久久久久福利| 热久久国产精品| 国产色综合久久无码有码| 久久www免费人成精品香蕉| 亚洲综合伊人久久综合| 久久久久黑人强伦姧人妻| 久久亚洲中文字幕精品有坂深雪| 国产激情久久久久影院老熟女免费| 久久精品青青草原伊人| 久久乐国产精品亚洲综合| 精品久久人人爽天天玩人人妻| 国产福利电影一区二区三区久久久久成人精品综合 | 久久精品9988| 亚洲综合伊人久久大杳蕉| 久久久久久青草大香综合精品| 国产精品美女久久久| 久久国产免费观看精品3| 久久久亚洲欧洲日产国码是AV | 国产精品久久久久久久app | 久久99精品国产麻豆宅宅| 日本精品久久久久影院日本| 亚洲国产精品久久久天堂| 综合久久一区二区三区| 久久久精品久久久久特色影视 | 思思久久好好热精品国产| 香蕉99久久国产综合精品宅男自 | 99久久综合国产精品免费| 久久久久人妻精品一区三寸蜜桃|