本帖最后由 oyljerry 于 2013-05-17 13:43:08 编辑

解决方案 »

  1.   

    http://www.codeproject.com/Articles/1652/CAsyncProxySocket-CAsyncSocket-derived-class-to-co
      

  2.   

    你在命令行下ping一下这个域名不就知道他的ip和端口了吗?
    http://blog.csdn.net/bodybo/article/details/7274865
      

  3.   

    ping过了!所有设置都对着呢!主要我觉得问题就出现在域名怎么传给代理服务器上面!这个格式不知道怎么写!
      

  4.   

     wumn29 
    wumn29 等级:
    结帖率:100% #2 得分:0 回复于: 2013-05-17 11:29:57 
    你在命令行下ping一下这个域名不就知道他的ip和端口了吗?
    http://blog.csdn.net/bodybo/article/details/7274865  先谢谢你!可是这个贴子我看过了!里面没有关于ip是域名时候怎么处理的!
     unsigned long tmpLong = inet_addr(ip.c_str());   
    210.    unsigned short port1 = ntohs(port);   
    211.    memcpy((char*)&proxyreq2->other, &tmpLong, 4);   
    212.    memcpy((char*)(&proxyreq2->other) + 4, &port1, 2);   
    我想知道ip是域名的时候怎么写?
      

  5.   

    你用gethostbyname把域名解析成IP地址不就行了吗。这有socket实现的lookup,查找域名:
    http://download.csdn.net/detail/geoff08zhang/4571358
      

  6.   

    回复于: 2013-05-17 12:52:57 
    你用gethostbyname把域名解析成IP地址不就行了吗。这有socket实现的lookup,查找域名:
    http://download.csdn.net/detail/geoff08zhang/4571358 
    ///////////////////////////////////////////////
    我也想过这样做的!可是在真实的代理环境下面客户机是没有DNS的!这个gethostbyname不用dns吗??我这样做过!可是也是不通!
    我现在按照sock5文档中所规定的格式传域名!可是就是不对!这是写的代码!
    if (m_nTypeOfIP == CNetTransport::DOMAINNAME)
    {
     m_proxyreq2->Atyp = 3;
     port = ntohs(m_nPort);
     len=m_strServerIP.GetLength();
     m_proxyreq2->other[0]=len;
     CopyMemory(&m_proxyreq2->other[1],m_strServerIP,len);
     CopyMemory(&m_proxyreq2->other[1]+len,&port,2);
     m_sock.Send(buff,sizeof(struct sock5req2)+len+2,0);
    我就是不知道哪错了!请各位朋友指点一下!谢谢!
      

  7.   

    没什么奇怪的,我写了sock5 tcp代理.用的没问题.地址字段中的第一字节是以字节为单位的该域名的长度,没有结尾的NULL字节
    即读指定长度字符数组.给定了长度,没必要通讯占用一个null字节