<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 108,comments - 56,trackbacks - 0
    #include   <sys/stat.h>   
    #include   
    <sys/types.h>   
    #include   
    <sys/socket.h>   
    #include   
    <stdio.h>   
    #include   
    <malloc.h>   
    #include   
    <netdb.h>   
    #include   
    <fcntl.h>
    #include   
    <unistd.h>
    #include   
    <netinet/in.h>
    #include   
    <arpa/inet.h>

    #define    RES_LENGTH  10240 //接受字符的最大長度

    int     connect_socket(char * server,int serverPort);
    int     send_msg(int sockfd,char * sendBuff);
    char *  recv_msg(int sockfd);
    int     close_socket(int sockfd);

    int main(int argc,char ** argv)
    {
        
    int    sockfd=0;
        
    char     sendMsg[30]="abc.org\r\n\r";
        
    char    * res;
        sockfd
    =connect_socket("whois.pir.org",43);
        send_msg(sockfd,sendMsg);
        res
    =recv_msg(sockfd);
        printf(res);
        free(res);
        close_socket(sockfd);
        
    return 0;
    }
    /************************************************************
     * 連接SOCKET服務器,如果出錯返回-1,否則返回socket處理代碼
     * server:服務器地址(域名或者IP),serverport:端口
     * *******************************************************
    */
    int    connect_socket(char * server,int serverPort){
        
    int    sockfd=0;
        
    struct    sockaddr_in    addr;
        
    struct    hostent        * phost;
        
    //向系統注冊,通知系統建立一個通信端口
        
    //AF_INET表示使用IPv4協議
        
    //SOCK_STREAM表示使用TCP協議
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){
            herror(
    "Init socket error!");
            
    return -1;
        }

        bzero(
    &addr,sizeof(addr));
        addr.sin_family
    =AF_INET;
        addr.sin_port
    =htons(serverPort);
        addr.sin_addr.s_addr
    =inet_addr(server);//按IP初始化
        if(addr.sin_addr.s_addr == INADDR_NONE){//如果輸入的是域名
            phost = (struct hostent*)gethostbyname(server);
            
    if(phost==NULL){
                herror(
    "Init socket s_addr error!");
                
    return -1;
            }
            addr.sin_addr.s_addr 
    =((struct in_addr*)phost->h_addr)->s_addr;
        }
        
    if(connect(sockfd,(struct sockaddr*)&addr,sizeof(addr))<0)
            
    return -1;//0表示成功,-1表示失敗
        else
            
    return sockfd;

    }

    /**************************************************************
     * 發送消息,如果出錯返回-1,否則返回發送的字符長度
     * sockfd:socket標識,sendBuff:發送的字符串
     * ********************************************************
    */
    int    send_msg(int sockfd,char * sendBuff){
        
    int    sendSize=0;
        
    if((sendSize=send(sockfd,sendBuff,strlen(sendBuff),0))<=0){
            herror(
    "Send msg error!");
            
    return -1;
        }
    else
            
    return sendSize;
    }

    /****************************************************************
     *接受消息,如果出錯返回NULL,否則返回接受字符串的指針(動態分配,注意釋放)
     *sockfd:socket標識
     * ********************************************************
    */
    char *    recv_msg(int sockfd){
        
    char * response;
        
    int  flag=0,recLenth=0;
        response
    =(char *)malloc(RES_LENGTH);
        memset(response,
    0,RES_LENGTH);
        
    for(flag=0;;){
            
    if((recLenth=recv(sockfd,response+flag,RES_LENGTH-flag,0))==-1){
                free(response);
                herror(
    "Recv msg error!");
                
    return NULL;
            }
    else if(recLenth==0)
                
    break;
            
    else{
                flag
    +=recLenth;
                recLenth
    =0;
            }
        }
        response[flag]
    ='\0';
        
    return response;
    }
    /**************************************************
     *關閉連接
     * *********************************************
    */
    int    close_socket(int sockfd){
        close(sockfd);
        
    return 0;
    }
    posted on 2007-12-17 11:14 破繭而出 閱讀(6530) 評論(2)  編輯  收藏 所屬分類: C/C++

    FeedBack:
    # re: Socket客戶端例子[C語言]
    2008-03-26 16:00 | wangfeizjk
    為什么我用你這個客戶端接收的時候會報錯啊。這個錯誤是為什么Recv msg error! : Resolver Error 0 (no error)
      回復  更多評論
      
    # re: Socket客戶端例子[C語言]
    2011-11-10 10:58 | Norz
    @wangfeizjk
    你是在windows下吧?
    win下創建socket需要先初始化WSADATA  回復  更多評論
      
    主站蜘蛛池模板: 亚洲国产精品成人| 免费观看四虎精品国产永久| 亚洲日韩精品一区二区三区 | 在线播放免费播放av片| 亚洲国产精品国自产电影| 91福利免费网站在线观看| 亚洲精品自产拍在线观看| 三年片在线观看免费| 亚洲无吗在线视频| 中文字幕影片免费在线观看 | 免费涩涩在线视频网| 亚洲国产成人久久综合| 无码囯产精品一区二区免费| 亚洲AV午夜成人片| 日韩免费人妻AV无码专区蜜桃| 久久久久亚洲精品天堂| 两性刺激生活片免费视频| 亚洲日韩精品国产3区| 男女啪啪永久免费观看网站| 国产精品亚洲二区在线| 老司机亚洲精品影视www| 国产无遮挡裸体免费视频在线观看 | 又大又硬又粗又黄的视频免费看| jjzz亚洲亚洲女人| 日日躁狠狠躁狠狠爱免费视频| 国产亚洲?V无码?V男人的天堂 | 国产精品视频免费| 亚洲国产成人无码AV在线| 亚洲日韩精品无码专区网站| 免费人成在线观看视频高潮| 亚洲精品在线播放| 成人免费看片又大又黄| 国产精品极品美女自在线观看免费 | 免费精品国产自产拍在线观看图片| 亚洲Aⅴ在线无码播放毛片一线天| 亚洲天堂在线视频| 国产大片免费网站不卡美女| 国产亚洲精品美女久久久久久下载| 亚洲人成网亚洲欧洲无码久久| 免费人成在线视频| 2020亚洲男人天堂精品|