计算机网络实践socket全双工,(计算机网络课程实验)Socket TCP实现简单的HTTP客户端...

一、实验目的

熟悉Socket TCP编程,实现一个简单的HTTP客户端

二、实验内容

向指定的web服务器发送HTTP请求,服务器响应,获取服务器的首页(主页),在客户端显示该主页的主要信息(HTTP版本号等和HTML文档的部分内容),不解析HTML。

三、实验过程

26445db2be784154cd1530995d8f2bb4.png

本实验核心代码(注意下面向服务器发送数据的格式非常重要,格式不对将无法请求成功):

char sendData[] = "GET / HTTP/1.1\r\nHOST:www.baidu.com\r\n\r\n";

四、实验结果

4740a7319cf08185f15f9d5907acf828.png

五、总结

本次实验,我学会了如何通过Socket TCP编程,实现向服务器发送HTTP请求的功能,爬取到服务器主页的HTML数据。在实验中遇到的问题主要是请求不成功的问题,我通过查询资料,发现发送的数据格式不正确,当我按照正确的数据格式进行发送时,便能得到服务器的响应,获取到了服务器主页的信息。

通过这个实验,结合写python爬虫的点滴经历,我加深了对爬虫基本原理的认识。

附上实验代码:

开发环境:VC++6.0

编程语言:C

注意端口号设成80,IP地址设置成百度的IP:220.181.112.244

#include #include #pragma comment(lib,"ws2_32.lib")

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

{

//freopen("out.txt","w",stdout);

WORD sockVersion = MAKEWORD(2,2);

WSADATA data;

if(WSAStartup(sockVersion, &data) != 0)

{

return 0;

}

SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if(sclient == INVALID_SOCKET)

{

printf("invalid socket !");

return 0;

}

sockaddr_in serAddr;

serAddr.sin_family = AF_INET;

serAddr.sin_port = htons(80);

serAddr.sin_addr.S_un.S_addr = inet_addr("220.181.112.244");

if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)

{

printf("connect error !");

closesocket(sclient);

return 0;

}

//向百度服务器发请求,获取百度服务器主页

char sendData[] = "GET / HTTP/1.1\r\nHOST:www.baidu.com\r\n\r\n";

send(sclient, sendData, strlen(sendData), 0);

char recData[BUFSIZ];

while( recv(sclient, recData,BUFSIZ, 0)>0){

printf("%s",recData);

strnset(recData, '\0',BUFSIZ);

}

closesocket(sclient);

WSACleanup();

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值