<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  回復  更多評論
      
    主站蜘蛛池模板: 亚洲性日韩精品国产一区二区| 日本亚洲成高清一区二区三区| 青青青视频免费观看| 亚洲伊人久久精品影院| 免费在线观看视频网站| 一级毛片不卡免费看老司机| 亚洲短视频男人的影院| 午夜成人免费视频| 国产成人AV免费观看| 亚洲码和欧洲码一码二码三码| 亚洲综合精品网站| 4hu四虎最新免费地址| 五月天婷婷精品免费视频| 好久久免费视频高清| 亚洲av无码片在线观看| 亚洲综合精品网站| 日本一区二区三区免费高清| 中国内地毛片免费高清| 亚洲精品美女久久7777777| 亚洲人成网77777亚洲色| 免费看国产精品3a黄的视频| 中国极品美軳免费观看| 亚洲精品色播一区二区| 亚洲一区二区三区电影| 亚洲综合精品网站| 精品免费国产一区二区| 51在线视频免费观看视频| 特级做a爰片毛片免费看| 亚洲AV无码专区在线亚| 亚洲va在线va天堂va四虎 | 亚洲精品国产自在久久| 99久久综合国产精品免费| 亚洲偷自拍另类图片二区| 亚洲国产精品久久久久婷婷软件| 曰批全过程免费视频在线观看无码| 久久精品国产亚洲AV| 91丁香亚洲综合社区| 亚洲精品人成无码中文毛片| 成年人网站在线免费观看| 在线成人爽a毛片免费软件| 国产日韩一区二区三免费高清|