• <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編程實(shí)例(一個(gè)Hello World程序)

            在Linux下寫了個(gè)小的socket程序,分為客戶端和服務(wù)器端,服務(wù)端開一個(gè)端口(2000),做為一個(gè)daemon,等待客戶的連接請(qǐng)求.一旦有客戶連接,服務(wù)器端打印出客戶端的IP地址和端口,并且向服務(wù)器端發(fā)送歡迎信息和時(shí)間.下面是服務(wù)端的代碼(tcpserver.c).由于這只是個(gè)簡(jiǎn)單的程序,所以只用了單線程實(shí)現(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 ;
            }


             客戶每次用一個(gè)隨機(jī)的端口連接服務(wù)器,并接收來自服務(wù)器的歡迎信息,然后打印出來(tcpclient).運(yùn)行的時(shí)候接受一個(gè)參數(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下通過編譯,有幾個(gè)warining.但是不影響.

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

            精品国产乱码久久久久久浪潮| 蜜桃麻豆WWW久久囤产精品| 中文国产成人精品久久不卡 | 久久久久高潮毛片免费全部播放| 精品一久久香蕉国产线看播放| 国产A三级久久精品| 久久久WWW成人| 久久噜噜电影你懂的| 亚洲国产精品成人久久| 欧美午夜A∨大片久久| 亚洲第一永久AV网站久久精品男人的天堂AV| 大蕉久久伊人中文字幕| 国产精品亚洲美女久久久| 97久久婷婷五月综合色d啪蜜芽| 99久久精品免费国产大片| 久久99精品久久只有精品| 久久99久国产麻精品66| 亚洲综合精品香蕉久久网| 亚洲а∨天堂久久精品9966| 韩国三级中文字幕hd久久精品 | 男女久久久国产一区二区三区 | 久久久久一本毛久久久| 久久精品国产99国产精偷| 久久99国内精品自在现线| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久亚洲精品无码播放| 亚洲一区二区三区日本久久九| 香蕉久久av一区二区三区| 久久最新精品国产| 九九久久99综合一区二区| 热re99久久6国产精品免费| 中文字幕日本人妻久久久免费| 久久亚洲国产精品成人AV秋霞| 久久精品99久久香蕉国产色戒| 久久精品一区二区| 久久99精品综合国产首页| 久久w5ww成w人免费| 久久夜色精品国产www| 久久se这里只有精品| 日日躁夜夜躁狠狠久久AV| 久久男人Av资源网站无码软件|