一个关于获得主机IP的问题。
在网上下的一个例子。从www.codeproject.com上下载一个图片.操作系统2000
char buff[512];
CString s;
WSADATA wsaData;
struct hostent *hp;
unsigned int addr;
struct sockaddr_in server;
CString servername;
CString filepath;
CString filename;
ParseURL(m_url,servername,filepath,filename);
int wsaret=WSAStartup(0x101,&wsaData);
if(wsaret)
return;
s.Format("Initialized WinSock");
m_list.AddString(s);
SOCKET conn;
conn=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(conn==INVALID_SOCKET)
return;
s.Format("SOCKET created");
m_list.AddString(s);
if(inet_addr(servername)==INADDR_NONE)
{
hp=gethostbyname(servername);//?????
}
else
{
addr=inet_addr(servername);
hp=gethostbyaddr((char*)&addr,sizeof(addr),AF_INET);
}
if(hp==NULL)
{
closesocket(conn);
return;
}
s.Format("hostname/ipaddress resolved");
m_list.AddString(s);
server.sin_addr.s_addr=*((unsigned long*)hp->h_addr);
server.sin_family=AF_INET;
server.sin_port=htons(80);
if(connect(conn,(struct sockaddr*)&server,sizeof(server)))
{
closesocket(conn);
return;
}
s.Format("Connected to server :- %s",servername);
m_list.AddString(s);
sprintf(buff,"GET %s\r\n\r\n",filepath);
send(conn,buff,strlen(buff),0);
s.Format("sending command :- GET %s to server",filepath);
m_list.AddString(s);
CFile f;
int y;
CString fname="c:\\";
fname+=filename;
f.Open(fname,CFile::modeCreate | CFile::modeWrite);
s.Format("starting to receive file");
m_list.AddString(s);
while(y=recv(conn,buff,512,0))
{
f.Write(buff,y);
}
f.Close();
s.Format("File downloaded and saved :- %s",fname);
m_list.AddString(s);
closesocket(conn);
s.Format("SOCKET closed");
m_list.AddString(s);
WSACleanup();
s.Format("De-Initialized WinSock");
m_list.AddString(s);
下面这个
hp=gethostbyname(servername);
在我的机器上运行得到 hp 的内容为0x00000000,我的计算机通过局域网代理服务器上网。将程序拿到服务器上运行就可以成功下载我想要的图片。为什么???请各位指点。