RT...
代理服务器客户端的源代码..就像QQ游戏那样..高级设置里有个设置代理服务器的功能..
网上搜索都是服务器端的..我郁闷..
问题解决了开贴再加分..大家帮帮忙...

解决方案 »

  1.   

    switch(m_LogType)
    {
    case 0://no proxy
    {
    dlg->proxy_link = false;
    dlg->m_serveraddr.sin_port = htons(6000);

    dlg->m_serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);
    ////////////////
    if(dlg->linkserver != 1)
    {
    if(connect(dlg->m_serverSocket,(const sockaddr*)&dlg->m_serveraddr,sizeof(dlg->m_serveraddr)) == SOCKET_ERROR)
    {
    dlg->setLight(2);
    /*
    CString er;
    er.Format("link server error! the error code is %d", WSAGetLastError());
    dlg->m_Received += er;
    dlg->m_Received += "\r\n";
    ::PostMessage(AfxGetMainWnd()->m_hWnd, UPDATEDATA, 0, 0);
    */
    closesocket(dlg->m_serverSocket);
    AfxMessageBox("连接服务器失败!");
    dlg->linkserver=9;
    // exit(0);
    }
    else
    {
    // dlg->linkserver=1;
    WSAAsyncSelect(dlg->m_serverSocket, AfxGetMainWnd()->m_hWnd, CLIENT_TCP_EVENT, FD_READ | FD_CLOSE);
    CString t = dlg->getTime();
    dlg->sendbuf.Format("%-4.4s%-4.4s%-14.14s%-15.15s%-15.15s%-10.10s",
    "0062","1110",t,m_User,m_Password,"");
    }
    dlg->Send();
    }


    }
    break;
    case 2://http proxy
    {
    dlg->m_serveraddr.sin_port = htons(m_ProxyPort);
    dlg->m_serveraddr.sin_addr.S_un.S_addr = inet_addr(m_ProxyIP);
    if(dlg->linkserver != 1)
    {
    if(connect(dlg->m_serverSocket,(const sockaddr*)&dlg->m_serveraddr,sizeof(dlg->m_serveraddr)) == SOCKET_ERROR)
    {
    dlg->setLight(2);
    /*
    CString er;
    er.Format("link server error! the error code is %d", WSAGetLastError());
    dlg->m_Received += er;
    dlg->m_Received += "\r\n";
    ::PostMessage(AfxGetMainWnd()->m_hWnd, UPDATEDATA, 0, 0);
    */
    closesocket(dlg->m_serverSocket);
    AfxMessageBox("连接代理失败!");
    dlg->linkserver=9;
    // exit(0);
    }
    else
    {
    // dlg->linkserver=1;
    WSAAsyncSelect(dlg->m_serverSocket, AfxGetMainWnd()->m_hWnd, CLIENT_TCP_EVENT, FD_READ | FD_CLOSE);

    char buff[600]={0};
    if(m_ProxyUser == "")
    {
    sprintf(buff, "%s%s:%d%s","CONNECT ",sIP,6000," HTTP/1.1\r\nUser-Agent: MyApp/0.1\r\n\r\n");
    int ret=send(dlg->m_serverSocket,buff,strlen(buff),0);
    if(ret==SOCKET_ERROR)
    {
    CString er;
    er.Format("连接服务器失败! %d", WSAGetLastError());
    AfxMessageBox(er);
    // closesocket(m_serverSocket);
    return;
    }
    }
    else
    {
    char in[200]={0};
    sprintf(in,"%s:%s",m_ProxyUser,m_ProxyPin);
    char out[200]={0};
    dlg->typeConvert.base64_Encode(in,out ,strlen(in),200);
    CString m_N_P(out);
    m_N_P.TrimRight(); sprintf(buff,"CONNECT %s:%d HTTP/1.0\r\nProxy-Authorization: Basic %s\r\n\r\n",sIP,6000,m_N_P);
    int ret=send(dlg->m_serverSocket,buff,strlen(buff),0);
    if(ret==SOCKET_ERROR)
    {
    CString er;
    er.Format("连接服务器失败! %d", WSAGetLastError());
    AfxMessageBox(er);
    // closesocket(m_serverSocket);
    return;
    }


    }
    dlg->proxy_link_step =5;
    }
    }

    }
    break;
    case 1://socks5 proxy
    {
    dlg->m_serveraddr.sin_port = htons(m_ProxyPort);
    dlg->m_serveraddr.sin_addr.S_un.S_addr = inet_addr(m_ProxyIP);
    if(dlg->linkserver != 1)
    {
    if(connect(dlg->m_serverSocket,(const sockaddr*)&dlg->m_serveraddr,sizeof(dlg->m_serveraddr)) == SOCKET_ERROR)
    {
    dlg->setLight(2);
    /*
    CString er;
    er.Format("link server error! the error code is %d", WSAGetLastError());
    dlg->m_Received += er;
    dlg->m_Received += "\r\n";
    ::PostMessage(AfxGetMainWnd()->m_hWnd, UPDATEDATA, 0, 0);
    */
    closesocket(dlg->m_serverSocket);
    AfxMessageBox("连接代理失败!");
    dlg->linkserver=9;
    // exit(0);
    }
    else
    {
    // dlg->linkserver=1;
    WSAAsyncSelect(dlg->m_serverSocket, AfxGetMainWnd()->m_hWnd, CLIENT_TCP_EVENT, FD_READ | FD_CLOSE); char buffer[10]={0};

    sock5req1 *m_ClientReq1;
    m_ClientReq1=(sock5req1*)buffer;
    m_ClientReq1->Ver=0x05;
    m_ClientReq1->nMethods=02;
    m_ClientReq1->Methods[0]=0x00;
    m_ClientReq1->Methods[1]=0x02;

    int ret=send(dlg->m_serverSocket,buffer,4,0);
    if(ret==SOCKET_ERROR)
    {
    CString er;
    er.Format(" error code is %d", WSAGetLastError());
    AfxMessageBox(er);
    closesocket(dlg->m_serverSocket);
    return;
    } }
    } }
    break;
    }