WWW超文本源码浏览器

Linux下的C程序:读取远程服务器上的网页源码。

/*功能:WWW超文本源码浏览器
*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>// connect to domain at port
int htconnect(char *domain, int port)
{int white_sock;struct hostent *site;struct sockaddr_in me;site = gethostbyname(domain);if(site == NULL)return -2;white_sock = socket(AF_INET, SOCK_STREAM, 0);if(white_sock < 0)return -1;memset(&me, 0, sizeof(struct sockaddr_in));memcpy(&me.sin_addr, site->h_addr_list[0], site->h_length);me.sin_family = AF_INET;me.sin_port = htons(port);return (connect(white_sock, (struct sockaddr*)&me, sizeof(struct sockaddr)) < 0) ? 1 : white_sock;
}// send formatted string to the port
int htsend(int sock, char *fmt, ...)
{char buf[1024];va_list argptr;va_start(argptr, fmt);vsprintf(buf, fmt, argptr);va_end(argptr);return send(sock, buf, strlen(buf), 0);
}void main(int argc, char **argv)
{int black_sock;char bugs_bunny[3];if(argc < 2){printf("Usage:\t %s <host>\n", argv[0]);return ;}black_sock = htconnect(argv[1], 80);if(black_sock < 0){printf("Socket connect error\n");return ;}htsend(black_sock, "GET /joe.html HTTP/1.0%c", 10);		// [/joe.html]: requested page on the serverhtsend(black_sock, "Host:%s%c", argv[1], 10);			// 10: refer to <Enter> keyhtsend(black_sock, "%c", 10);while(read(black_sock, bugs_bunny, 1) > 0)				// read one byte every time{printf("%c", bugs_bunny[0]);						// print data from server}close(black_sock);										// close socketprintf("\n");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP为何采用三次握手来建立连接,若采用二次握手可以吗

1. TCP简介 TCP&#xff08;Transmission Control Protocol 传输控制协议&#xff09;是一种面向连接&#xff08;连接导向&#xff09;的、可靠的、基于IP的传输层协议&#xff0c;采用三次握手确认建立一个连接。 TCP为了保证报文传输的可靠[1]&#xff0c;就给每个包一个序号…

在asp.net中备份还原SQL Server数据库

在web中&#xff0c;安全性主要体现在两个方面&#xff1a;一个是程序安全性&#xff0c;即防止网页在插入恶意代码&#xff1b;另一个是数据库安全性&#xff0c;这个我们可以经常备份数据库来实现。在文中&#xff0c;我将演示如果在网页中备份和恢复数据库。其实备份和恢复数…

Leetcode刷题(4)罗马数字转整数

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&a…

深入理解移动前端开发之viewport

在移动设备上进行网页的重构或开发&#xff0c;首先得搞明白的就是移动设备上的viewport了&#xff0c;只有明白了viewport的概念以及弄清楚了跟viewport有关的meta标签的使用&#xff0c;才能更好地让我们的网页适配或响应各种不同分辨率的移动设备。 一、viewport的概念 通…

Git之版本回退

像这样&#xff0c;你不断对文件进行修改&#xff0c;然后不断提交修改到版本库里&#xff0c;就好比玩RPG游戏时&#xff0c;每通过一关就会自动把游戏状态存盘&#xff0c;如果某一关没过去&#xff0c;你还可以选择读取前一关的状态。有些时候&#xff0c;在打Boss之前&…

整型数组的循环右移

/*实现整型数组的循环右移cycleMoveR1&#xff1a;临时空间比较大&#xff0c;但是时间复杂度为O(1)cycleMoveR2&#xff1a;临时空间比较小&#xff0c;时间复杂度为O(n)*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h&…

Leetcode刷题(5)最长公共前缀

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&…

Internal Server Error - http code 500

Eror Example 1 :转载于:https://www.cnblogs.com/shuman/p/3938096.html

面包与童话

面包主导童话? 或许吧&#xff01; 油吧 我会吃上面包的 至于童话 随便吧 与我无关 心也会慢慢慢慢的平静下来的 转载于:https://www.cnblogs.com/fairy-tale/articles/1272636.html

Git之工作区和暂存区

工作区&#xff08;Working Directory&#xff09; 就是你在电脑里能看到的目录&#xff0c;比如我的learngit文件夹就是一个工作区 版本库&#xff08;Repository&#xff09; 工作区有一个隐藏目录.git&#xff0c;这个不算工作区&#xff0c;而是Git的版本库 Git的版本库…

vue移动端html5页面根据屏幕适配的四种解决方法

最近做了两个关于h5页面对接公众号的项目&#xff0c;不得不提打开微信浏览器内置地图导航的功能确实有点恶心。下次想起来了的话&#xff0c;进行总结分享一下如何处理。在vue移动端h5页面当中&#xff0c;其中适配是经常会遇到的问题&#xff0c;这块主要有死个方法可以适用。…

数据报套接字服务端和客户端

这里练习用数据报套接字来通讯。 listener.c // 数据报套接字服务器(listener.c)&#xff1a;在指定端口监听&#xff0c;收到数据报后关闭连接#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.…

javascript学习系列(12):数组中的join方法

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说j…

NIO机制总结

Selector selector Selector.open();普通的IO流的读取&#xff0c;写入都是一个字节一个字节或一个字符一个字符的循环进行&#xff0c;在这个过程中&#xff0c;程序是阻塞的&#xff0c;inputStream虽然既可以一个字节一个字节的读 inputSream.read()&#xff0c;也可以批量…

Git之管理修改

现在&#xff0c;假定你已经完全掌握了暂存区的概念。下面&#xff0c;我们要讨论的就是&#xff0c;为什么Git比其他版本控制系统设计得优秀&#xff0c;因为Git跟踪并管理的是修改&#xff0c;而非文件 你会问&#xff0c;什么是修改&#xff1f;比如你新增了一行&#xff0…

双绞线施工质量的检测方法

综合布线工程的施工与结束的过程中&#xff0c;往往需要对布线工程的质量进行必要的检测&#xff0c;其中双绞线的施工质量首当其冲&#xff0c;笔者根据多年的设计施工经验&#xff0c;归纳出一套比较实用的检测程序&#xff0c;描述出来与各位同行共享。测试前的检查不可少 检…

TCP文件传输

下面是一个简单的TCP文件传输的例子&#xff0c;实现环境&#xff1a;Linux C Server.c // 向客户端发送文件#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <stdio.h>#include <stdlib…

javascript学习系列(14):数组中的indexOf方法

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说…

Git之撤销修改

自然&#xff0c;你是不会犯错的。不过现在是凌晨两点&#xff0c;你正在赶一份工作报告&#xff0c;你在readme.txt中添加了一行 在你准备提交前&#xff0c;一杯咖啡起了作用&#xff0c;你猛然发现了“stupid boss”可能会让你丢掉这个月的奖金&#xff01; 既然错误发现得…

glibc与MSVC CRT(转载)

glibc与MSVC CRT 运行库是平台相关的&#xff0c;因为它与操作系统结合得非常紧密。C语言的运行库从某种程度上来讲是C语言的程序和不同操作系统平台之间的抽象层&#xff0c;它将不同的操作系统API抽象成相同的库函数。比如我们可以在不同的操作系统平台下使用fread来读取文件…