那位大虾能用Socket编写下载HTTP的东西,比如是一个htm文件,还有FTP的东西
下载ZIP文件应该也能用HTTP协议来走吧,该怎么办呢,分不够可以再加,大虾们一定要帮忙呀,很急的.
EMAIL:[email protected]
下载ZIP文件应该也能用HTTP协议来走吧,该怎么办呢,分不够可以再加,大虾们一定要帮忙呀,很急的.
EMAIL:[email protected]
http://www.codeproject.com/internet/ftpwanderer.asp
http://www.codeguru.com/network/mt_server.html
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 0 ); err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we couldn't find a usable */
/* WinSock DLL. */
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 0 ) {
/* Tell the user that we couldn't find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
} //¹¹Ôì Socket
SOCKET s=socket(AF_INET,SOCK_STREAM,0); sockaddr_in addr;
char strSubAddr[256],fname[256];
char strBuffer[MAX_PATH]; addr.sin_family=AF_INET;
addr.sin_port=htons(80);
//addr.sin_addr=in_addr("211.157.102.21");
//addr.sin_addr.s_addr=inet_addr("211.157.102.21");
//addr.sin_addr.s_addr=inet_addr("61.153.40.19");
addr.sin_addr.s_addr=inet_addr("210.192.98.37"); int iResult; //Á¬½Ó·þÎñÆ÷
iResult=connect(s,(struct sockaddr *)&addr,sizeof(addr)); if(iResult==SOCKET_ERROR)
{
WSACleanup();
return;
} //´«ÈëÃüÁîÐÐ
PCSTR ps = "Get /code/downcode.asp?id=1601 HTTP/1.1\r\n"
"Host: www.vckbase.com\r\n"
"Accept: */*\r\n"
"Referer: http://www.vckbase.com/code/listcode.asp?mclsid=9&sclsid=901\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n"
"Pragma: no-cache\r\n"
"Cache-Control: no-cache\r\n"
"Connection: close\r\n\r\n";
//ps = "GET / HTTP/1.1\r\n"
// "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\r\n"
/* "Accept-Language: zh-cn\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n"
"Host: www.liutaotao.com\r\n"
"Connection: Keep-Alive\r\n\r\n"; */
strcpy(strSubAddr,ps); //дÈÕÖ¾
Memo1->Clear();
Memo1->Lines->Add(ps);
Memo1->Lines->Add("Receve:---------------------------");
Memo1->Lines->Add("\n\n"); //·¢ËÍÏûÏ¢
iResult=send(s,strSubAddr,strlen(strSubAddr),0); if(iResult!=SOCKET_ERROR)
{
int iFile=FileCreate("D:\\MyTemp\\test.htm");
AnsiString stemp="";
if(iFile==-1)
{
ShowMessage("Create failed!");
return;
}
do
{
strset(strBuffer,0);
//½ÓÊÕ×Ö·û
iResult=recv(s,strBuffer,sizeof(strBuffer),0);
//FileWrite(iFile,strBuffer,sizeof(strBuffer));
stemp+=strBuffer;
Memo1->Lines->Add((AnsiString)strBuffer);
}
while(iResult>0);
int tt=stemp.Pos("<");
AnsiString t2=stemp.SubString(tt,stemp.Length()-tt+1);
FileWrite(iFile,stemp.SubString(tt,stemp.Length()-tt).c_str(),stemp.SubString(tt,stemp.Length()-tt).Length());
FileClose(iFile);
}
存成本地的htm文件,不知道怎么做,这样还差太远,还有FTP的东西
用法举例:
CInternetSession INetSession;
CInternetConnection INetConn( &INetSession, strServer );
CFtpConnection* pFtp = INetSession.GetFtpConnection();
CHttpConnection* pHttp = INetSession.GetHttpConnection();
jmcooler<签名>
#define host_name "www.csdn.net"
#define winsock_version 0x0101
void main()
{
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
char hostname[100] ;
wsprintf(hostname,"GET /expert/topic/378/378382.shtm HTTP/1.0 %c%c",10,10);
printf("%s",hostname);
char dest[1000];
if(WSAStartup(winsock_version,&wsadata))
printf("can't open");
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
printf("lphostent is null");
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET;
// Use def. now, need to handle general case
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf("can't connect");
closesocket(hsocket);
return;
}
else
printf("connected with %s\n",host_name);
nRet = send(hsocket, hostname, strlen(hostname), 0);
if (nRet == SOCKET_ERROR)
{
printf("send() failed");
closesocket(hsocket);
}
else
printf("send() OK\n");
nRet=1;
while(nRet>0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
if(nRet>0)
dest[nRet]=0;
else
dest[0]=0;
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s",dest);
}
}///////////////////////////////////////////////////////////////////////////
//SDK post
///////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
#define winsock_version 0x0101
void main()
{
//I create C:\Inetpub\wwwroot\test\test.asp ,start the web service
//start my program, the result is OK.
//If it works,it is written by masterz,otherwise I don't know who write it.
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
const char* host_name="127.0.0.1";
char* req="POST /test/test.asp HTTP/1.0\r\n"
"From: local\r\n"
"User-Agent: post_test/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 20\r\n\r\n"
"type=12345&name=aaaa";
if(WSAStartup(winsock_version,&wsadata))
printf("can't initial socket");
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
printf("lphostent is null");
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET;
// Use def. now, need to handle general case
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf("can't connect");
closesocket(hsocket);
return;
}
else
printf("connected with %s\n",host_name);
nRet = send(hsocket, req, strlen(req), 0);
if (nRet == SOCKET_ERROR)
{
printf("send() failed");
closesocket(hsocket);
}
else
printf("send() OK\n");
char dest[1000];
nRet=1;
while(nRet>0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
if(nRet>0)
dest[nRet]=0;
else
dest[0]=0;
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s",dest);
}
}