说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

C有没有网络方面的库函数呢?

编辑:说三道四文库 发布时间:2018-08-20 04:50
HTML文档下载 WORD文档下载 PDF文档下载
RT
语言本身不定义

根据你的开发平台而定
windows 下 有winsock,winsock2
谢谢二位
winsock有没有可以下载文件的接口啊,比如下载网页。
或者通过winsock如何实现下载?

#include <Winsock2.h>
#include <stdio.h>
#include<fstream.h>
#pragma comment( lib , "ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) 
{
WSACleanup( );
return; 
}

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;



hostent* remoteHost;
char* host_name="www.baidu.com";
unsigned int addr;
if (isalpha(host_name[0])) 
{   /* host address is a name */
if (host_name[strlen(host_name)-1] == '\n') 
host_name[strlen(host_name)-1] = '\0'; 
remoteHost = gethostbyname(host_name);
}
else  

addr = inet_addr(host_name);
remoteHost = gethostbyaddr((char *)&addr, 4, AF_INET);
}

memcpy(&addrSrv.sin_addr.S_un.S_addr,remoteHost->h_addr,remoteHost->h_length);
if (WSAGetLastError() != 0) 
{
if (WSAGetLastError() == 11001)
printf("Host not found...\nExiting.\n");
}
else
printf("error#:%ld\n", WSAGetLastError());

addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(80);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char recvBuf[1024*200+1]={0};

/////////////////////////////////////////////////////////////////////////////////////////

char sendBuff[200]="GET http://www.baidu.com/s?wd=男人&cl=3 HTTP/1.0\r\nHost:www.baidu.com\r\n\r\n";
send(sockClient,sendBuff,strlen(sendBuff),0);

ofstream outfile("baidu.txt",ios::out);
int cc;
cc=recv(sockClient,recvBuf,1024*200,0);
while(cc!=SOCKET_ERROR&&cc>0)
{
outfile<<recvBuf;
cc=recv(sockClient,recvBuf,1024*200,0);
}

outfile.close();
outfile1.close();
closesocket(sockClient);
WSACleanup();

}

谢谢飞雪,真佩服!
这个呢:
Cannot open include file: 'fstream.h': No such file or directory
用的VS 2005
http://man.lupaworld.com/
下有一个《LinuxC函数手册》
#include <Winsock2.h>
#include <stdio.h>
#include<fstream.h>

->
#include <Winsock2.h>
#include <cstdio>
#include <fstream>
#include <iostream>
using namespace std;
引用 7 楼 tianjiao85 的回复:
这个呢:
Cannot open include file: 'fstream.h': No such file or directory
用的VS 2005

没找到fstream.h头文件
谢谢大侠们,我也知道,就是不知道怎么处理,太菜了,
好像快点学好啊,
TO 飞雪,
getpage.cpp(76) : error C2065: 'outfile1' : undeclared identifier
getpage.cpp(76) : error C2228: left of '.close' must have class/struct/union
type is ''unknown-type''


//下面代码VS2008通过

#include  <Winsock2.h> 
#include  <cstdio> 
#include  <fstream> 
#include  <iostream> 
using namespace std;

#pragma comment( lib , "ws2_32.lib")
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return 1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) 
{
WSACleanup( );
return 1; 
}

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;



hostent* remoteHost;
char* host_name="www.baidu.com";
unsigned int addr;
if (isalpha(host_name[0])) 
{   /* host address is a name */
if (host_name[strlen(host_name)-1] == '\n') 
host_name[strlen(host_name)-1] = '\0'; 
remoteHost = gethostbyname(host_name);
}
else  

addr = inet_addr(host_name);
remoteHost = gethostbyaddr((char *)&addr, 4, AF_INET);
}

memcpy(&addrSrv.sin_addr.S_un.S_addr,remoteHost->h_addr,remoteHost->h_length);
if (WSAGetLastError() != 0) 
{
if (WSAGetLastError() == 11001)
printf("Host not found...\nExiting.\n");
}
else
printf("error#:%ld\n", WSAGetLastError());

addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(80);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char recvBuf[1024*200+1]={0};

/////////////////////////////////////////////////////////////////////////////////////////

char sendBuff[200]="GET http://www.baidu.com/s?wd=男人&cl=3 HTTP/1.0\r\nHost:www.baidu.com\r\n\r\n";
send(sockClient,sendBuff,strlen(sendBuff),0);

ofstream outfile("baidu.txt",ios::out);
int cc;
cc=recv(sockClient,recvBuf,1024*200,0);
while(cc!=SOCKET_ERROR&&cc>0)
{
outfile<<recvBuf;
cc=recv(sockClient,recvBuf,1024*200,0);
}

outfile.close();
closesocket(sockClient);
WSACleanup();
    return 0;
}

HTTP/1.1 200 OK

Date: Tue, 15 Apr 2008 02:09:53 GMT

Server: BWS/1.0

Content-Length: 23827

Content-Type: text/html

Cache-Control: private

Set-Cookie: BAIDUID=C70CBBA9E79D47F74DCD09B9D4AE7426:FG=1; expires=Tue, 15-Apr-38 02:09:53 GMT; path=/; domain=.baidu.com

P3P: CP=" OTI DSP COR IVA OUR IND COM "



<!--STATUS OK--><html><head>

<meta http-equiv="content-type" content="text/html;charset=gb2312">

<title>百度搜索_男人      </title>

<STYLE><!--

body,td,.p1,.p2,.i{font-family:arial}

body{margin:6px 0 0 0;background-color:#fff;color:#000;}

outfile1做什么用,没定义,飞雪大侠
试试啊,谢谢!
删除outfile1就OK了。
谢谢各位,明白了,使用了GET请求,就可以获得网页(学过,就是不会用),特别谢谢飞雪!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘