【轉】Socket通過HTTP代理髮送資料

來源:互聯網
上載者:User

 

著作權聲明:原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。http://larch.blog.51cto.com/277889/51991

        最近在寫一個基於Socket的MFC程式,要求用戶端可以使用HTTP代理來串連到服務端。網上查了一堆資料,居然沒看到幾個好的,是我尋找方式有誤嗎>_<。誰有現成封裝好的包給我一個吧。

        總之,整理了下一堆資料,再改了網上幾個例子(主要是“HTTP 隧道 (HTTP代理Socket客戶)”這篇,其實我也就把那裡面的CSocket改成SOCKET了),搞出下面這堆東西。

 

 SOCKET socketsend=socket(AF_INET,SOCK_STREAM,0);//建立Socket
 SOCKADDR_IN ToAddr;   
 int comm=proxyip.Find(':'); //proxyip格式為ip:port
 ToAddr.sin_addr.S_un.S_addr=inet_addr(proxyip.Left(comm));
 ToAddr.sin_family=AF_INET;
 proxyip=proxyip.Mid(comm+1);
 ToAddr.sin_port=htons(atoi(proxyip));
    int retErr=connect(socketsend,(SOCKADDR*)&ToAddr,sizeof(ToAddr));  
    if(retErr==SOCKET_ERROR)  
    {  
  AfxMessageBox("connect   error");  
        return 0;  
    }  
 char tmpBuffer[40];
 memset(tmpBuffer,0,40);
 CString temp;
 //ipaddress為需要已連線的服務端的ip,port為服務端連接埠
 temp.Format("CONNECT %s:%s HTTP/1.1/r/nUser-Agent: MyApp/0.1/r/n/r/n",ipaddress,port);
    send(socketsend,temp.GetBuffer(temp.GetLength()),temp.GetLength(),0);  
    recv(socketsend,tmpBuffer,40,0);  
 char *tmp=strchr(tmpBuffer,' ');
 char flag[4];
 for(int i=0;i<3;i++)
  flag[i]=tmp[i+1];
 flag[4]='/0';
 if(strcmp(flag,"200")!=0)
 {
  AfxMessageBox("fail to connect proxy!/n");
  return 0;
 }
 return 1;

到這裡Proxy 伺服器就串連成功了,然後就可以直接用上面的socketsend來發送和接受資料。

比如:

send(socketsend,"try to send some words",128,0);

recv(socketsend,buf,128,0);

  

這個是 阻塞模式的例子,用的windows的api,大家將就看一下吧,誰有非阻塞模式的麻煩發我一個……

其實整個過程非常簡單,就是:

1.connectProxy 伺服器

2.發送一個包,格式為:CONNECT ip:port HTTP/1.1/r/nUser-Agent: MyApp/0.1/r/n/r/n

這裡的ip和port是你真正需要已連線的服務器的ip和連接埠。

3.接受伺服器的回應,如果回應裡帶有“HTTP/1.X 200 ”的字樣,就表示串連成功。以後你就可以用這個socket直接發送資料了。

 

本文出自 “落葉松” 部落格,請務必保留此出處http://larch.blog.51cto.com/277889/51991

本文出自 51CTO.COM技術部落格

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.