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

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Linux Socket編程實例(一個Hello World程序)

            在Linux下寫了個小的socket程序,分為客戶端和服務(wù)器端,服務(wù)端開一個端口(2000),做為一個daemon,等待客戶的連接請求.一旦有客戶連接,服務(wù)器端打印出客戶端的IP地址和端口,并且向服務(wù)器端發(fā)送歡迎信息和時間.下面是服務(wù)端的代碼(tcpserver.c).由于這只是個簡單的程序,所以只用了單線程實現(xiàn)!

            /* *
             * Tcp Server program, It is a simple example only.
             * zhengsh 200520602061 2
             * when client connect to server, send a welcome message and timestamp in server.
              
            */
             

            #include  
            <stdio.h> 
            #include  
            <sys/socket.h> 
            #include  
            <unistd.h> 
            #include  
            <sys/types.h> 
            #include  
            <netinet/in.h> 
            #include  
            <stdlib.h> 
            #include  
            <time.h> 
             
            #define  SERVER_PORT 20000  //  define the defualt connect port id 
            #define  LENGTH_OF_LISTEN_QUEUE 10  // length of listen queue in server 
            #define  BUFFER_SIZE 255 
            #define  WELCOME_MESSAGE "welcome to connect the server. " 

            int main(int argc, char** argv)
            {
                   
            int  servfd,clifd;
                   
            struct  sockaddr_in servaddr,cliaddr;

                   
            if  ((servfd  =  socket(AF_INET,SOCK_STREAM, 0 ))  <   0 )
                     
            {
                          printf( 
            " create socket error!\n " );
                          exit( 
            1 );
                   }
             
             
                   bzero( 
            & servaddr, sizeof (servaddr));

                   servaddr.sin_family  
            =  AF_INET;
                   servaddr.sin_port  
            =  htons(SERVER_PORT);
                   servaddr.sin_addr.s_addr  
            =  htons(INADDR_ANY);

                   
            if  (bind(servfd,( struct  sockaddr * ) & servaddr, sizeof (servaddr)) < 0 )
                     
            {
                          printf( 
            " bind to port %d failure!\n " ,SERVER_PORT);
                          exit( 
            1 );
                   }
             
             
                    
            if  (listen(servfd,LENGTH_OF_LISTEN_QUEUE)  <   0 )
                     
            {
                          printf( 
            " call listen failure!\n " );
                          exit( 
            1 );
                   }
             
             
                    
            while  ( 1 )
                     
            // server loop will nerver exit unless any body kill the process 

                          
            char  buf[BUFFER_SIZE];
                          
            long  timestamp;
                          socklen_t length  
            =   sizeof (cliaddr);
                          clifd  
            =  accept(servfd,( struct  sockaddr * ) & cliaddr, & length);

                           
            if  (clifd  <   0 )
                            
            {
                                 printf( 
            " error comes when call accept!\n " );
                                 
            break ;
                          }
             
             
                          strcpy(buf,WELCOME_MESSAGE);

                           
            // inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE); 

                          printf( 
            " from client,IP:%s,Port:%d\n " ,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));

                          timestamp  
            =  time(NULL);

                          strcat(buf, 
            " timestamp in server: " );
                          strcat(buf,ctime( 
            & timestamp));

                          send(clifd,buf,BUFFER_SIZE, 
            0 );

                          close(clifd);           

                   }
             // exit 
             
                   close(servfd);

                    
            return   0 ;
            }


             客戶每次用一個隨機的端口連接服務(wù)器,并接收來自服務(wù)器的歡迎信息,然后打印出來(tcpclient).運行的時候接受一個參數(shù),也就是服務(wù)器的ip地址.
            /*  Tcp client program, It is a simple example only.
             * zhengsh 200520602061 2
             * connect to server, and echo a message from server.
            */
             


            #include 
            <stdio.h>
            #include 
            <sys/socket.h>
            #include 
            <unistd.h>
            #include 
            <sys/types.h>
            #include 
            <netinet/in.h>
            #include 
            <stdlib.h> 


            #define  SERVER_PORT 20000  //  define the defualt connect port id 
            #define  CLIENT_PORT ((20001+rand())%65536)  //  define the defualt client port as a random port 
            #define  BUFFER_SIZE 255 
            #define  REUQEST_MESSAGE "welcome to connect the server.\n" 


            void  usage(char* name)
            {
                   printf( 
            " usage: %s IpAddr\n " ,name);
            }



            int  main(int argc, char** argv)
            {
                   
            int  servfd,clifd,length = 0;
                   
            struct  sockaddr_in servaddr,cliaddr;
                   socklen_t socklen  
            =   sizeof (servaddr);
                   
            char  buf[BUFFER_SIZE];

                    
            if (argc < 2 )
                     
            {
                          usage(argv[ 
            0 ]);
                          exit( 
            1 );
                   }
             

                   
            if ((clifd  =  socket(AF_INET,SOCK_STREAM, 0 ))  <   0 )
                     
            {
                         printf( 
            " create socket error!\n " );
                         exit( 
            1 );
                   }
             
             
                   srand(time(NULL)); 
            // initialize random generator 
             
                   bzero( 
            & cliaddr, sizeof (cliaddr));
                   cliaddr.sin_family  
            =  AF_INET;
                   cliaddr.sin_port  
            =  htons(CLIENT_PORT);
                   cliaddr.sin_addr.s_addr  
            =  htons(INADDR_ANY);

                   bzero( 
            & servaddr, sizeof (servaddr));
                   servaddr.sin_family  
            =  AF_INET;
                   inet_aton(argv[ 
            1 ], & servaddr.sin_addr);
                   servaddr.sin_port  
            =  htons(SERVER_PORT);
                  
            // servaddr.sin_addr.s_addr = htons(INADDR_ANY); 

                   
            if  (bind(clifd, (struct sockaddr* ) &cliaddr, sizeof (cliaddr)) < 0 )
                   
            {
                          printf( 
            " bind to port %d failure!\n " ,CLIENT_PORT);
                          exit( 
            1 );
                   }
             

                    
            if (connect(clifd,( struct  sockaddr * ) & servaddr, socklen)  <   0 )
                   
            {
                          printf( 
            " can't connect to %s!\n ", argv[ 1 ]);
                          exit( 
            1 );
                   }
             

                   length  
            =  recv(clifd, buf, BUFFER_SIZE, 0);
                    
            if  (length < 0)
                    
            {
                          printf( 
            " error comes when recieve data from server %s! ", argv[1] );
                          exit( 
            1 );
                   }
             

                   printf( 
            " from server %s :\n\t%s", argv[1], buf);

                   close(clifd);
                   
            return 0;
            }
             



            程序在Fedora core 4下通過編譯,有幾個warining.但是不影響.

            posted on 2006-04-20 17:49 楊粼波 閱讀(16043) 評論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程Linux編程

            久久午夜无码鲁丝片| 久久精品国产第一区二区三区| 人妻无码久久一区二区三区免费| 国产午夜精品久久久久九九电影| 久久久亚洲欧洲日产国码aⅴ| 久久婷婷色香五月综合激情| 国产激情久久久久影院小草| 久久精品嫩草影院| 久久久久人妻精品一区二区三区| 亚洲精品乱码久久久久久蜜桃不卡| 狠狠色丁香久久婷婷综合_中| 欧美久久一级内射wwwwww.| 国产免费福利体检区久久| 久久婷婷综合中文字幕| 国产精品久久永久免费| 久久午夜电影网| 久久精品国产精品亚洲下载| 日本欧美国产精品第一页久久| 久久久精品久久久久久| 无码国内精品久久人妻麻豆按摩| 久久夜色撩人精品国产| 亚洲国产天堂久久久久久| 久久这里有精品| 久久久亚洲欧洲日产国码aⅴ| 国产精品久久久久…| 99久久精品国产综合一区| 狠狠色伊人久久精品综合网 | 日本精品久久久久久久久免费| 久久久久这里只有精品 | 亚洲国产精品一区二区三区久久| 伊人色综合九久久天天蜜桃| 久久精品国产AV一区二区三区| 亚洲精品蜜桃久久久久久| 99久久无码一区人妻a黑| 日本久久久精品中文字幕| 久久久久久国产精品美女| 亚洲精品乱码久久久久久久久久久久 | 性高湖久久久久久久久| 韩国无遮挡三级久久| 青青热久久国产久精品 | 精品久久8x国产免费观看|