b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

三种获取网页源代码的方式(使用MFC / Socket)

电脑杂谈  发布时间:2020-04-04 18:14:32  来源:网络整理

mfc socket onclose_mfc的socket编程实例_mfc socket通信实例

第一种方法是在MFC中使用

复制代码mfc socket onclose,代码如下:

CString GetHttpFileData(CString strUrl)

{

CInternetSession会话(“ Internet Explorer”mfc socket onclose,0);

CHttpFile * pHttpFile = NULL;

CString strData;

CString strClip;

pHttpFile =(CHttpFile *)Session.OpenURL(strUrl);

while(pHttpFile-> ReadString(strClip))

{

strData + = strClip;

}

返回strData;

}

要说的是,pHttpFile-> ReadString()一次只能读取一个数据,并且读取的次数取决于网络状况,因此有必要将每次读取的数据添加到总数据的末尾,使用CString保存转到缓冲区处理: )

别忘了包含头文件#include 在项目设置中,必须选择使用MFC,否则它将无法编译

第二个是使用WinNet的纯API实现的

复制代码,代码如下:

#define MAXBLOCKSIZE 1024

#include

#include

#pragma注释(lib,“ wininet.lib”)

void GetWebSrcCode(const char * Url);

int _tmain(int argc,_TCHAR * argv [])

{

GetWebSrcCode(“ // www.jb51.net /”);

返回0;

}

mfc socket onclose_mfc socket通信实例_mfc的socket编程实例

void GetWebSrcCode(常量字符*网址)

{

HINTERNET hSession = InternetOpen(“ zwt”,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);

如果(hSession!= NULL)

{

HINTERNET hURL = InternetOpenUrl(hSession,Url,NULL,0,INTERNET_FLAG_DONT_CACHE,0);

如果(hURL!= NULL)

{

字符温度[MAXBLOCKSIZE] = {0};

ULONG Number = 1;

FILE *流;

if((stream = fopen(“ E: \\ test.html”,“ wb”))!= NULL)

{

同时(Number> 0)

{

InternetReadFile(hURL,Temp,MAXBLOCKSIZE-1和数字);

fwrite(温度,sizeof(字符),数字,流);

}

fclose(流);

}

InternetCloseHandle(hURL);

hURL = NULL;

}

InternetCloseHandle(hSession);

hSession = NULL;

}

}

第三种是使用未封装的套接字

复制代码,代码如下:

int main(int argc,char * argv [])

mfc socket onclose_mfc的socket编程实例_mfc socket通信实例

{

SOCKET hsocket;

SOCKADDR_IN saServer;

WSADATA wsadata;

LPHOSTENT lphostent;

int nRet;

char Dest [3000];

char * host_name =“ blog.sina.com.cn”;

char * req =“ GET /s/blog_44acab2f01016gz3.html HTTP / 1.1 \ r \ n”

“用户代理: Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 5.1; Trident / 4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E;. NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\ r \ n“

“主持人: blog.sina.com.cn \ r \ n \ r \ n”;

//初始化套接字

如果(WSAStartup(MAKEWORD(2,2),&wsadata))

printf(“初始化SOCKET时出错!”);

lphostent = gethostbyname(host_name);

如果(lphostent == NULL)

printf(“ lphostent为空!”);

hsocket =套接字(AF_INET,SOCK_STREAM,IPPROTO_TCP);

saServer.sin_family = AF_INET;

saServer.sin_port = htons(80);

saServer.sin_addr = *(((LPIN_ADDR)* lphostent-> h_addr_list);

//与SOCKET连接

nRet = connect(hsocket,(LPSOCKADDR)&saServer,sizeof(SOCKADDR_IN));

如果(nRet == SOCKET_ERROR)

{

printf(“建立连接时发生错误!”);

closesocket(hsocket);

返回0;

}

// SOCKET发送

mfc socket通信实例_mfc的socket编程实例_mfc socket onclose

nRet =发送(hsocket,req,strlen(req),0);

如果(nRet == SOCKET_ERROR)

{

printf(“发送数据包时发生错误!”);

closesocket(hsocket);

}

nRet = 1;

同时(nRet> 0)

{

//接收返回包

nRet = recv(hsocket,(LPSTR)Dest,sizeof(Dest),0);

如果(nRet> 0)

目标[nRet] = 0;

其他

目标[0] = 0;

char sDest [3000] = {0};

UTF8_2_GB2312(sDest,nRet,Dest,nRet);

//显示返回的数据包的大小和内容

// printf(“ \ n接收的字节: %d \ n”,nRet);

printf(“结果: \ n%s”,sDest);

}

}

此外,当我们获得上面的网页时,它可能是UTF8. 似乎大多数网站现在都使用这种编码!以下是代码转换.

复制代码,代码如下:

void UTF_8ToUnicode(wchar_t * pOut,char * pText)

{

char * uchar =(char *)pOut;

uchar [1] =((pText [0]&0x0F)<< 4)+((pText [1] >> 2)&0x0F);

uchar [0] =((pText [1]&0x03)<< 6)+(pText [2]&0x3F);

}

mfc socket onclose_mfc socket通信实例_mfc的socket编程实例

void Gb2312ToUnicode(wchar_t * pOut,char * gbBuffer)

{

:: MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,2,pOut,1);

}

void UTF_8ToGB2312(char * pOut,char * pText,int pLen)

{

char Ctemp [4];

内存集(Ctemp,0,4);

int i = 0,j = 0;

同时(i

{

if(pText [i]> = 0)

{

pOut [j ++] = pText [i ++];

}

其他

{

WCHAR Wtemp;

UTF_8ToUnicode(&Wtemp,pText + i);

UnicodeToGB2312(Ctemp,Wtemp);

pOut [j] =温度[0];

pOut [j + 1] =体温[1];

i + = 3;

j + = 2;

}

}

pOut [j] ='\ n';

返回;

}

这是转换为GB2312的代码


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-163927-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...