<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;
        
    //向系統(tǒng)注冊,通知系統(tǒng)建立一個通信端口
        
    //AF_INET表示使用IPv4協(xié)議
        
    //SOCK_STREAM表示使用TCP協(xié)議
        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;

    }

    /**************************************************************
     * 發(fā)送消息,如果出錯返回-1,否則返回發(fā)送的字符長度
     * sockfd:socket標識,sendBuff:發(fā)送的字符串
     * ********************************************************
    */
    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,否則返回接受字符串的指針(動態(tài)分配,注意釋放)
     *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 破繭而出 閱讀(6529) 評論(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下創(chuàng)建socket需要先初始化WSADATA  回復  更多評論
      
    主站蜘蛛池模板: 国产精品免费看久久久无码| 一级毛片**不卡免费播| 成人在线免费观看| 亚洲黄色免费观看| h片在线免费观看| 亚洲成人网在线播放| 国产精品成人免费福利| 亚洲午夜在线一区| 人禽杂交18禁网站免费| 亚洲午夜精品久久久久久app| 日韩在线免费视频| 亚洲国产综合AV在线观看| 免费欧洲美女牲交视频| 一本到卡二卡三卡免费高 | 亚洲精品国产日韩| 免费看www视频| 一边摸一边桶一边脱免费视频| 国产精品亚洲综合一区| 免费黄网站在线观看| 亚洲国产精品白丝在线观看| 天天摸夜夜摸成人免费视频| 男女作爱免费网站| 久久精品亚洲综合一品| 98精品全国免费观看视频| 最新国产精品亚洲| 免费v片视频在线观看视频| 无码毛片一区二区三区视频免费播放 | 亚洲av永久无码嘿嘿嘿| 国产日产成人免费视频在线观看 | 亚洲AV无码成人网站久久精品大| 91人人区免费区人人| 亚洲第一综合天堂另类专| 久久久久国产亚洲AV麻豆| 最近2019年免费中文字幕高清| 亚洲愉拍一区二区三区| 亚洲免费无码在线| www视频在线观看免费| 黄色网址免费在线| 亚洲黄色在线观看| 亚洲国产成人影院播放| 中文字幕在线观看免费视频|