• 大小: 7.95MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-07
  • 语言: C/C++
  • 标签: Socke  

资源简介

C++ Winsock 网络编程 仅支持http协议 Socket进行网络连接 解析整个html代码 宽度优先搜索,像爬虫一样遍历网页 正则表达式提取图片URL 将图片命名,保存在目录下

资源截图

代码片段和文件信息


/*下载图片 C++ Winsock 网络编程*/

#define _CRT_SECURE_NO_WARNINGS   //vs 2013用于忽略c语言安全性警告

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

using namespace std;

#pragma comment(lib “ws2_32.lib“)

char  host[500];

int num = 1;

char othPath[800];

string allHtml;

vector  photoUrl;

vector  comUrl;

map  mp; //防止相同网址重复遍历

SOCKET sock;

bool analyUrl(char *url) //仅支持http协议解析出主机和IP地址

{

char *pos = strstr(url “http://“);

if (pos == NULL)

return false;

else

pos += 7;

sscanf(pos “%[^/]%s“ host othPath);   //http:// 后一直到/之前的是主机名

cout << “host: “ << host << “   repath:“ << othPath << endl;

return true;

}





void regexGetimage(string &allHtml)  //C++11 正则表达式提取图片url

{

smatch mat;

regex pattern(“src=\“(.*?\.jpg)\““);

string::const_iterator start = allHtml.begin();

string::const_iterator end = allHtml.end();

while (regex_search(start end mat pattern))

{

string msg(mat[1].first mat[1].second);

photoUrl.push_back(msg);

start = mat[0].second;

}

}



void regexGetcom(string &allHtml) //提取网页中的http://的url

{

smatch mat;

//regex pattern(“href=\“(.*?\.html)\““);

regex pattern(“href=\“(http://[^\s‘\“]+)\““);

string::const_iterator start = allHtml.begin();

string::const_iterator end = allHtml.end();

while (regex_search(start end mat pattern))

{

string msg(mat[1].first mat[1].second);

comUrl.push_back(msg);

start = mat[0].second;

}

}

void preConnect()  //socket进行网络连接

{

WSADATA wd;

WSAStartup(MAKEWORD(2 2) &wd);

sock = socket(AF_INET SOCK_STREAM 0);

if (sock == INVALID_SOCKET)

{

cout << “建立socket失败! 错误码: “ << WSAGetLastError() << endl;

return;

}

sockaddr_in sa = { AF_INET };

int n = bind(sock (sockaddr*)&sa sizeof(sa));

if (n == SOCKET_ERROR)

{

cout << “bind函数失败! 错误码: “ << WSAGetLastError() << endl;

return;

}

struct hostent  *p = gethostbyname(host);

if (p == NULL)

{

cout << “主机无法解析出ip! 错误吗: “ << WSAGetLastError() << endl;

return;

}

sa.sin_port = htons(80);

memcpy(&sa.sin_addr p->h_addr 4);//   with some problems ???

//sa.sin_addr.S_un.S_addr = inet_addr(*(p->h_addr_list));

//cout << *(p->h_addr_list) << endl;

n = connect(sock (sockaddr*)&sa sizeof(sa));

if (n == SOCKET_ERROR)

{

cout << “connect函数失败! 错误码: “ << WSAGetLastError() << endl;

return;

}

//像服务器发送GET请求,下载图片

string  reqInfo = “GET “ + (string)othPath + “ HTTP/1.1\r\nHost: “ + (string)host + “\r\nConnection:Close\r\n\r\n“;

if (SOCKET_ERROR == send(sock reqInfo.c_str() reqInfo.size() 0))

{

cout << “send error! 错误码: “ << WSAGetLastError() << endl;


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    I.A....     40444  2018-09-22 21:29  Robot\Debug\img\ class=htt.jpg

    I.A....     20104  2018-09-22 21:29  Robot\Debug\img\httpp1.img.jpg

    I.A....     25833  2018-09-22 21:29  Robot\Debug\img\httpp2.img.jpg

    I.A....      6231  2018-09-22 21:29  Robot\Debug\img\httpp3.img.jpg

    I.A....     34512  2018-09-22 21:29  Robot\Debug\img\httpp4.img.jpg

    I.A....       162  2018-09-22 21:29  Robot\Debug\img\httpp5.img.jpg

    I.A....    396800  2018-09-22 21:31  Robot\Debug\Robot.exe

    I.A....   1477212  2018-09-22 21:31  Robot\Debug\Robot.ilk

    I.A....   3623936  2018-09-22 21:31  Robot\Debug\Robot.pdb

    I.A....   2185280  2018-09-22 21:31  Robot\Robot\Debug\main.obj

    I.A....      1979  2018-09-22 21:31  Robot\Robot\Debug\Robot.log

    I.A....       714  2018-09-22 21:31  Robot\Robot\Debug\Robot.tlog\cl.command.1.tlog

    I.A....     32216  2018-09-22 21:31  Robot\Robot\Debug\Robot.tlog\CL.read.1.tlog

    I.A....       628  2018-09-22 21:31  Robot\Robot\Debug\Robot.tlog\CL.write.1.tlog

    I.A....      1298  2018-09-22 21:31  Robot\Robot\Debug\Robot.tlog\link.command.1.tlog

    I.A....      2782  2018-09-22 21:31  Robot\Robot\Debug\Robot.tlog\link.read.1.tlog

    I.A....       606  2018-09-22 21:31  Robot\Robot\Debug\Robot.tlog\link.write.1.tlog

    I.A....       196  2018-09-22 21:31  Robot\Robot\Debug\Robot.tlog\Robot.lastbuildstate

    I.A....    863232  2018-09-22 21:31  Robot\Robot\Debug\vc120.idb

    I.A....    831488  2018-09-22 21:31  Robot\Robot\Debug\vc120.pdb

     文件       5435  2018-09-22 21:31  Robot\Robot\main.cpp

     文件       4016  2018-09-22 01:44  Robot\Robot\Robot.vcxproj

    I.A....       945  2018-09-22 01:44  Robot\Robot\Robot.vcxproj.filters

    I.A....  34865152  2018-09-22 21:31  Robot\Robot.sdf

    I.A....       961  2018-09-22 01:43  Robot\Robot.sln

    I.A..H.     19968  2018-09-22 21:31  Robot\Robot.v12.suo

    I..D...         0  2018-09-22 21:31  Robot\Robot\Debug\Robot.tlog

    I..D...         0  2018-09-22 21:29  Robot\Debug\img

    I..D...         0  2018-09-22 21:31  Robot\Robot\Debug

    I..D...         0  2018-09-22 01:44  Robot\Robot\img

............此处省略6个文件信息

评论

共有 条评论