sock访问网站?
一个网络地址可能对应着多个网站 ,我们访问这个网络地址的时候是通过主机头来分别我们要去的网站
我用socket访问网站,在哪里加入主机头,怎么加入?
下面是我的代码 :请指教
#include<iostream>#include<winsock2.h>#include<string>#include<windows.h>using namespace std;#pragma comment(lib,"ws2_32.lib")UINT recvData(LPVOID lpp);class TcpSendHttp {public: TcpSendHttp(); virtual ~TcpSendHttp(); bool connectWeb(const char* ip,int port); void createHttpHead(string head); int sendHttpHead(); int recvHttpHead(); void keepLive();private: string m_requestHead;//请求头 string m_responseHead;//响应头 string m_cookie;//服务器返回session SOCKET m_socket;//套接字};TcpSendHttp::TcpSendHttp(){ m_requestHead=""; m_responseHead=""; m_cookie=""; //加载动态文件 WSADATA wsaData; if(WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) { std::cout<<"up error"<<std::endl; exit(1); }}TcpSendHttp::~TcpSendHttp(){ closesocket(m_socket); WSACleanup();}//连接服务器bool TcpSendHttp::connectWeb(const char* ip,int port){ SOCKADDR_IN addrSev; addrSev.sin_addr.S_un.S_addr = inet_addr(ip); addrSev.sin_port = htons(port); addrSev.sin_family = AF_INET; //请求连接 if(m_socket != NULL) closesocket(m_socket); m_socket = socket(AF_INET,SOCK_STREAM,0); if(connect(m_socket,(SOCKADDR *)&addrSev,sizeof(SOCKADDR))<0) { std::cout<<"connect error"<<std::endl; return false; } else { //DWORD threadId; //CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)recvData,&m_socket,0,&threadId); return true; } }//创建HTTP头void TcpSendHttp::createHttpHead(string head){ m_requestHead+= head;}//发送int TcpSendHttp::sendHttpHead(){ int leng = send(m_socket,m_requestHead.c_str(),m_requestHead.length()+1,0); if(leng!=(m_requestHead.length()+1)) { return -1; } else { cout<<"send right"<<endl; m_requestHead=""; return leng; }}//接收int TcpSendHttp::recvHttpHead(){ m_responseHead=""; cout<<"recving"<<endl; char answer[10240]; int resp_leng =10240; resp_leng= recv(m_socket, (char*)&answer, 10240, 0); if (resp_leng>0) { cout<<resp_leng<<endl; m_responseHead+= string(answer).substr(0,resp_leng); cout<<"响应头\n"<<m_responseHead<<endl; } if(m_cookie=="" && m_responseHead!="") { int cookieBegin = m_responseHead.find("Set-Cookie:",0); int cookieEnd = m_responseHead.find("\r\n",cookieBegin); m_cookie.append(m_responseHead,cookieBegin+4,cookieEnd-cookieBegin-12); } cout<<"recv over"<<endl; return resp_leng;}//将cookie加入HTTP请求头中void TcpSendHttp::keepLive(){ m_requestHead =m_requestHead+m_cookie+"\r\n";}//自己尝试着用线程来recv/*UINT recvData(LPVOID lpp){ cout<<"thread begin"<<endl; SOCKET temp = *((SOCKET*)lpp); char answer2[1024]; int resp_leng2 =1024; while(1) { resp_leng2= recv(temp,(char*)&answer2, 1024, 0); if(resp_leng2>0) { answer2[resp_leng2] = '\0'; cout<<answer2<<" "<<resp_leng2<<endl; answer2[0]='\0'; } }}*/int main(){/* hostent *phe; char *p; phe = gethostbyname("www.9481.com"); cout<<phe<<endl; if(phe!=NULL) { p = *phe->h_addr_list; cout<<p<<endl; }*/ TcpSendHttp tc; tc.createHttpHead("POST http://www.9481.com HTTP/1.1\r\n"); tc.createHttpHead("Accept:*/*\r\n"); tc.createHttpHead("Accept-Language:zh-CN\r\n"); tc.createHttpHead("Referer:http://www.9481.com/login.html\r\n"); tc.createHttpHead("Content-Type:application/x-www-form-urlencoded\r\n"); tc.createHttpHead("Accept-Encoding: gzip, deflate\r\n"); tc.createHttpHead("Host:www.9481.com\r\n"); tc.createHttpHead("Content-Length:38\r\n"); tc.createHttpHead("Connection:close\r\n"); tc.createHttpHead("Cookie:Hm_lvt_0b7a95f009a5d8ebf1f7d6dc9350d96d=1347852750151,1347853144851; Hm_lpvt_0b7a95f009a5d8ebf1f7d6dc9350d96d=1347853144851; ASPSESSIONIDQQASBDCR=KONJGNDDGEHOEMOLIDAAPLIC; loginErrTimes=9"); tc.createHttpHead("Cache-Control: no-cache\r\n"); tc.createHttpHead("User-Agent:Mozilla/5.0 (Windows NT.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5\r\n"); tc.createHttpHead("\nusername:910612&password:910612&authCode: &\r\n"); tc.connectWeb("59.54.54.254",80); int leng = tc.sendHttpHead(); cout<<"发送字节数"<<leng<<endl; leng = tc.recvHttpHead(); cout<<"接收字节数"<<leng<<endl; }