【转】Socket通过HTTP代理发送数据
2009-05-27 17:58
323 查看
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/article/7282453.html |
最近在写一个基于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; 到这里代理服务器就连接成功了,然后就可以直接用上面的socketsend来发送和接受数据。 比如: send(socketsend,"try to send some words",128,0); recv(socketsend,buf,128,0); 这个是 阻塞模式的例子,用的windows的api,大家将就看一下吧,谁有非阻塞模式的麻烦发我一个…… 其实整个过程非常简单,就是: 1.connect代理服务器 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直接发送数据了。 本文出自 “落叶松” 博客,请务必保留此出处/article/7282453.html 本文出自 51CTO.COM技术博客 |
相关文章推荐
- Socket通过HTTP代理发送数据
- 通过python下的socket实现组播数据的发送和接收
- HELP,多线程通过同一个socket发送数据到服务端,socket底动会不会同步呢?
- [Linux] 通过shell给unix socket发送数据
- [Linux] 通过shell给unix socket发送数据
- Java中通过TCP协议发送和接收数据-Socket编程
- Java中通过TCP协议发送和接收数据-Socket编程
- Android 通过Socket实现手机端向PC发送数据,并接受PC端返回的数据
- Android socket通过UDP的方式发送,接收数据
- socket通信——通过Udp传输方式,将一段文字数据发送出去
- Java中通过TCP协议发送和接收数据-Socket编程
- android端和pc端使用usb进行socket通信,其中android是服务器端,pc是客户端。如何实现安卓端输入的数据通过按钮发送到pc端?
- 通过SOCKET发送、接收结构体数据
- socket通信——通过Udp传输方式,将一段文字数据发送出去
- android平台通过socket向C++服务器端发送数据和接收数据的相关问题
- android平台通过socket向C++服务器端发送数据和接收数据的相关问题
- Android端通过Usb建立Socket通讯(实时发送视频数据)
- 13-socket的实践到内核--TCP的socket数据的发送
- 【练习向】jQuery基础教程第四版课后练习——Book06_jQuery_通过Ajax发送数据
- 通过RTMP协议将AVC(H264)数据发送到流媒体服务器