• <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>

            興海北路

            ---男兒仗劍自橫行
            <2008年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統(tǒng)計

            • 隨筆 - 85
            • 文章 - 0
            • 評論 - 17
            • 引用 - 0

            常用鏈接

            留言簿(6)

            隨筆分類

            隨筆檔案

            收藏夾

            全是知識啊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            入門多線程服務(wù)器程序?qū)嵗?/a>

            fedora core 5
            g++

            服務(wù)器端程序:

            #include <stdlib.h>

            #include 
            <sys/types.h>

            #include 
            <sys/socket.h>

            #include 
            <netinet/in.h>

            #include 
            <unistd.h>

            #include 
            <pthread.h>

            #include 
            <stdio.h>

            #include 
            <string.h>

            #include 
            <arpa/inet.h>



            #define PORT 8848

            #define BACKLOG 5

            #define MAXDATASIZE 1000



            void process_cli(int connectfd, sockaddr_in client);



            void* start_routine(void* arg);

            struct ARG {

                   
            int connfd;

                   sockaddr_in client;

                   };

                   

            main()

            {

                  
            int listenfd, connectfd;

                  pthread_t thread;         
            //id of thread

                  ARG 
            *arg;

                  
            struct sockaddr_in server; //server's address info

                  
            struct sockaddr_in client; //client's

                  
            int sin_size;

                  

                  
            //create tcp socket

                  printf(
            "socket.... ");

                  
            if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

                                perror(
            "creating socket failed.");

                                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);

                  printf(
            "bind.... ");

                  
            if(bind(listenfd,(struct sockaddr *)&server,sizeof(struct sockaddr)) == -1) {

                      perror(
            "bind error.");

                      exit(
            1);

                  }

                  

                  printf(
            "listen.... ");

                  
            if(listen(listenfd,BACKLOG) == -1) {

                      perror(
            "listen() error ");

                      exit(
            1);

                  }



                  sin_size 
            = sizeof(struct sockaddr_in);

                  
            while(1)

                  {

                      
            //accept() using main thread

                      printf(
            "accepting.... ");

                      
            if((connectfd = accept(listenfd,

                                 (
            struct sockaddr *)&client,

                                 (socklen_t
            *)&sin_size)) == -1) {

                          perror(
            "accept() error ");

                          exit(
            1);

                      }



                      arg 
            = new ARG;

                      arg
            ->connfd = connectfd;

                      memcpy((
            void *)&arg->client, &client, sizeof(client));

                    

                      
            //invoke start_routine to handle this thread

                      printf(
            "thread_creating....");

                      
            if(pthread_create(&thread, NULL, start_routine, (void*)arg)){

                          perror(
            "pthread_creat() error");

                          exit(
            1);

                      }          

                  }

                  close(listenfd);      

            }



            void process_cli(int connectfd, sockaddr_in client)

            {

                
            int num;

                
            char recvbuf[MAXDATASIZE], sendbuf[MAXDATASIZE], cli_name[MAXDATASIZE];

                

                printf(
            "you got a connection from %s.  ",inet_ntoa(client.sin_addr) );

                
            //get client's name from client

                num 
            = recv(connectfd, cli_name, MAXDATASIZE, 0);

                
            if(num == 0) {

                    close(connectfd);

                    printf(
            "Client disconnected. ");

                    
            return;

                }

                cli_name[num 
            - 1= '

             客戶端代碼:

            /* cthread.c */
            #include 
            <stdio.h>
            #include 
            <sys/types.h>
            #include 
            <netinet/in.h>
            #include 
            <sys/socket.h>
            #include 
            <netdb.h>
            #include 
            <unistd.h>
            #include 
            <string.h>
            #include 
            <arpa/inet.h>
            #include 
            <errno.h>
            #include 
            <stdlib.h>
            #define PORT 8848
            #define MAXDATASIZE 100

            void process(FILE *fp, int sockfd);
            char* getMessage(char* sendline, int len, FILE* fp);
            int main(int argc, char *argv[])
            {
                
            int fd;
                
            struct hostent *he;
                
            struct sockaddr_in server; //server's address info

                
            if(argc != 2) {
                    printf(
            "Usage: %s <ip address> ",argv[0]);
                    exit(
            1);
                }
                
                
            if((he = gethostbyname(argv[1])) == NULL){
                    perror(
            "gethostbyname() error");
                    exit(
            1);
                }

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

                bzero(
            &server , sizeof(server));
                server.sin_family 
            = AF_INET;
                server.sin_port 
            = htons(PORT);
                server.sin_addr 
            = *((struct in_addr *)he->h_addr);

                
            if(connect(fd, (struct sockaddr *)&server,
                            
            sizeof(struct sockaddr)) == -1){
                    perror(
            "connect() error");
                    exit(
            1);
                }

                process(stdin,fd);

                close(fd);
            }

            void process(FILE *fp, int sockfd)
            {
                
            char sendline[MAXDATASIZE],recvline[MAXDATASIZE];
                
            int numbytes;

                printf(
            "connected to server. ");
                
            //send name to server
                printf("Input name:");
                
            if(fgets(sendline, MAXDATASIZE, fp) == NULL){
                    printf(
            " Exit. ");
                    
            return;
                }
                send(sockfd, sendline, strlen(sendline), 
            0);

                
            //send message to server
                
            //when the string is not NULL , send another!
                while(getMessage(sendline,MAXDATASIZE,fp) != NULL) {
                    send(sockfd, sendline, strlen(sendline), 
            0);

                    
            if((numbytes = recv(sockfd, recvline, MAXDATASIZE, 0)) == 0){
                        printf(
            "server terminated. ");
                        
            return;
                    }
                    recvline[numbytes] 
            = '

            編譯命令:

            g++ -g -o s sthread.c -pthread

            g++ -g -o c cthread.c -lc -lnsl

            啟動服務(wù)器:

            ./s

            啟動客戶端:

            ./c 127.0.0.1

            然后提示輸入客戶機(jī)的名字,再就提示輸入一串字符,然后服務(wù)器就反轉(zhuǎn)再發(fā)回來。

            posted on 2008-07-02 09:48 隨意門 閱讀(360) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            97视频久久久| 欧美日韩中文字幕久久久不卡| 97久久精品无码一区二区天美| 国产福利电影一区二区三区久久久久成人精品综合 | 无码专区久久综合久中文字幕| 日韩va亚洲va欧美va久久| 麻豆精品久久精品色综合| 成人国内精品久久久久影院VR| 精品熟女少妇a∨免费久久| 久久精品人人做人人妻人人玩 | 伊人 久久 精品| 久久久久青草线蕉综合超碰| 国产偷久久久精品专区| 久久久久无码精品国产| 久久久久精品国产亚洲AV无码| 亚洲性久久久影院| 久久久久亚洲精品日久生情| 久久人人爽人人人人片av| 伊人久久大香线蕉av不卡| 日韩精品久久久肉伦网站 | 久久精品国产精品亚洲精品| 国产成人精品综合久久久久| 性色欲网站人妻丰满中文久久不卡| 久久精品人人做人人爽电影| 亚洲午夜久久久久久噜噜噜| 久久综合噜噜激激的五月天| 久久精品国产99国产精品澳门| 色偷偷88欧美精品久久久| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久精品国产99国产精品| 久久丫精品国产亚洲av不卡| 嫩草影院久久99| 亚洲国产成人久久笫一页| 老男人久久青草av高清| 久久久国产精品亚洲一区| 久久99精品久久久久久秒播| 久久综合给合久久国产免费| 久久亚洲国产中v天仙www | 久久嫩草影院免费看夜色| 无码人妻久久一区二区三区免费| 伊人久久大香线蕉av不卡|