.NET网络编程学习(三)--网络蜘蛛程序(Spider)
.NET网络编程学习(三)
在上一节中,我们通过一个简单的Http服务器程序学习了Socket服务器端的编程.
这一节将通过一个简单的网络蜘蛛程序(Spider)来学习Socket客户端的程序设计.
Spider是搜索引擎重要的组成部分,其基本的原理也比较简单,但要真正写一个能够用于搜索引擎的Spider绝非一件易事。
从本质来说,Spider就是一个网页下载程序,然后再对下载的网页进行分析,提取,整理,然后交给索引程序处理生成索引。
而对于Socket客户端来说,分以下几步来实现连接服务器端:
(1)创建IPEndPoint实例和套接字
IPAddress hostIp = Dns.GetHostEntry("http://www.hust.edu.cn").addresslist[0];IPEndPoint ep = new IPEndPoint(hostIp, 80);Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
(2)连接服务器端
try{client.Connect(ep);}catch (SocketException e){Console.WriteLine(e.Message);}
(3)发送请求
client.Send(Encoding.GetEncoding("us-ascii").GetBytes("GET /index.html HTTP/1.1\r\n"));client.Send(Encoding.GetEncoding("us-ascii").GetBytes("Host:hust.edu.cn\r\n"));client.Send(Encoding.GetEncoding("us-ascii").GetBytes("Connection:Close\r\n"));client.Send(Encoding.GetEncoding("us-ascii").GetBytes("\r\n"));
(4)接收数据
StringBuilder recstr = new StringBuilder();byte[] buff = new byte[1024];int rCount=0;while(true){rCount = client.Receive(buff, buff.Length, SocketFlags.None); //读取数据if (rCount > 0){recstr.Append(ASCIIEncoding.ASCII.GetString(buff, 0, rCount));}elsebreak;}
完整代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace MyHttpClient
{class Program{static void Main(string[] args){IPAddress hostIp = Dns.GetHostEntry("www.hust.edu.cn").AddressList[0];IPEndPoint ep = new IPEndPoint(hostIp, 80);Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);try{client.Connect(ep);}catch (SocketException e){Console.WriteLine(e.Message);}//发送请求client.Send(Encoding.GetEncoding("us-ascii").GetBytes("GET /index.html HTTP/1.1\r\n"));client.Send(Encoding.GetEncoding("us-ascii").GetBytes("Host:hust.edu.cn\r\n"));client.Send(Encoding.GetEncoding("us-ascii").GetBytes("Connection:Close\r\n"));client.Send(Encoding.GetEncoding("us-ascii").GetBytes("\r\n"));StringBuilder recstr = new StringBuilder();byte[] buff = new byte[1024];int rCount=0;while(true){rCount = client.Receive(buff, buff.Length, SocketFlags.None); //读取数据if (rCount > 0){recstr.Append(ASCIIEncoding.ASCII.GetString(buff, 0, rCount));}elsebreak;}using (StreamWriter sw = new StreamWriter(File.Create(@"c:\test.html"))){sw.Write(recstr.ToString()); //写入文件}Console.WriteLine("下载成功!");Console.Read();}}
}```
.NET网络编程学习(三)--网络蜘蛛程序(Spider)相关推荐
- .NET网络编程学习(三)
在上一节中,我们通过一个简单的Http服务器程序学习了Socket服务器端的编程.这一节将通过一个简单的网络蜘蛛程序(Spider)来学习Socket客户端的程序设计. Spider是搜索引擎重要的组 ...
- C++网络编程学习:网络数据报文的收发
网络编程学习记录 使用的语言为C/C++ 源码支持的平台为:Windows 笔记一:建立基础TCP服务端/客户端 点我跳转 笔记二:网络数据报文的收发 点我跳转 笔记三:升级为select网络模型 ...
- linux 网络编程学习
linux 网络编程学习 Linux网络编程学习路线 - CTHON - 博客园 (cnblogs.com)
- 网络编程0:网络基础知识
返回:Linux网络编程学习笔记 1.网络应用程序设计模式 C/S模式:传统的网络应用设计模式,客户机(client)/服务器(server)模式.需要在通讯两端各自部署客户机和服务器来完成数据通信. ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
为什么80%的码农都做不了架构师?>>> 本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...
- java网络编程的三要素
1.IP地址,是设备的标识.Java学习笔记http://www.mobiletrain.org/note/java/ 要想让网络中的计算机能相互通信,必须为每台计算机指定一个标识号,通过此标识号来指 ...
- 谈一谈网络编程学习经验(陈硕)
作者:陈硕 原文地址:http://blog.csdn.net/solstice/article/details/6527585 本文谈一谈我在学习网络编程方面的一些个人经验."网络编程& ...
- C++网络编程学习:服务端多线程分离业务处理高负载
网络编程学习记录 使用的语言为C/C++ 源码支持的平台为:Windows / Linux 笔记一:建立基础TCP服务端/客户端 点我跳转 笔记二:网络数据报文的收发 点我跳转 笔记三:升级为se ...
- 谈一谈网络编程学习经验
转自 陈硕 giantchen@gmail.com blog.csdn.net/Solstice 2011-06-06 PDF 版下载:https://github.com/downloads/ch ...
- 谈一谈网络编程学习经验(06-08更新)
谈一谈网络编程学习经验 陈硕 giantchen@gmail.com blog.csdn.net/Solstice 2011-06-08 PDF 版下载:https://github.com/down ...
最新文章
- 从jQuery的缓存到事件监听
- Caffe、TensorFlow、MXnet三库对比
- 修改Linux root用户名 后提示network manager启动失败修复
- iOS之UIview动画
- GDCM:gdcm::Fragment的测试程序
- 如何在大流量场景下云淡风轻地进行线上发布?
- Java开发人员必须看到的13个Decks保持更新
- Python(4)--Pycharm安装、使用小技巧
- 【转】21世纪律师办公自动化的一个调查
- 网络编程之OSI七层协议
- Spring StringUtils#cleanPath method 浅析
- 插桩 java_“插桩”式技术
- 二阶魔方万能还原公式_2阶魔方教程简单口诀(二阶魔方还原公式口决是什么?)...
- 非平衡电桥电阻计算_用非平衡电桥如何测量电阻_非平衡电桥测量电阻详解
- 西数trex自动版u盘版_当移动硬盘遇上它,改变生活:西数My Passport随行版
- 动网新闻系统IWMS中实现带标题幻灯片的功能效果
- vivado中Cordic IP核使用——计算正余弦(sin/cos)
- 模拟电路技术之基础知识(二)
- springboot集成rabbitmq商品秒杀业务实战(流量削峰)
- 跳绳机 高频霍尔开关 MH253
热门文章
- [读书笔记]小决心还是大决心
- 计算机电子书 2018 BiliDrive 备份
- Hive数据分析案例——汽车销售数据分析
- 笔记:HPlus模板 单选框
- ios visio流程图_微软visio绘图查看器ios版下载|Microsoft Visio Viewer iphone/ipad版下载 v1.17 - 跑跑车苹果网...
- Python基础:安装包
- python安装包————————百度网盘
- 计算机组成第五章课后答案,计算机组成原理第5章部分习题参考答案
- 常见的Python解释器,你了解多少?
- ubuntu下非常好用的PDF阅读器