.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)相关推荐

  1. .NET网络编程学习(三)

    在上一节中,我们通过一个简单的Http服务器程序学习了Socket服务器端的编程.这一节将通过一个简单的网络蜘蛛程序(Spider)来学习Socket客户端的程序设计. Spider是搜索引擎重要的组 ...

  2. C++网络编程学习:网络数据报文的收发

    网络编程学习记录 使用的语言为C/C++ 源码支持的平台为:Windows 笔记一:建立基础TCP服务端/客户端  点我跳转 笔记二:网络数据报文的收发  点我跳转 笔记三:升级为select网络模型 ...

  3. linux 网络编程学习

    linux 网络编程学习  Linux网络编程学习路线 - CTHON - 博客园 (cnblogs.com)

  4. 网络编程0:网络基础知识

    返回:Linux网络编程学习笔记 1.网络应用程序设计模式 C/S模式:传统的网络应用设计模式,客户机(client)/服务器(server)模式.需要在通讯两端各自部署客户机和服务器来完成数据通信. ...

  5. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    为什么80%的码农都做不了架构师?>>>    本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...

  6. java网络编程的三要素

    1.IP地址,是设备的标识.Java学习笔记http://www.mobiletrain.org/note/java/ 要想让网络中的计算机能相互通信,必须为每台计算机指定一个标识号,通过此标识号来指 ...

  7. 谈一谈网络编程学习经验(陈硕)

    作者:陈硕  原文地址:http://blog.csdn.net/solstice/article/details/6527585 本文谈一谈我在学习网络编程方面的一些个人经验."网络编程& ...

  8. C++网络编程学习:服务端多线程分离业务处理高负载

    网络编程学习记录 使用的语言为C/C++ 源码支持的平台为:Windows / Linux 笔记一:建立基础TCP服务端/客户端  点我跳转 笔记二:网络数据报文的收发  点我跳转 笔记三:升级为se ...

  9. 谈一谈网络编程学习经验

    转自  陈硕 giantchen@gmail.com blog.csdn.net/Solstice 2011-06-06 PDF 版下载:https://github.com/downloads/ch ...

  10. 谈一谈网络编程学习经验(06-08更新)

    谈一谈网络编程学习经验 陈硕 giantchen@gmail.com blog.csdn.net/Solstice 2011-06-08 PDF 版下载:https://github.com/down ...

最新文章

  1. 从jQuery的缓存到事件监听
  2. Caffe、TensorFlow、MXnet三库对比
  3. 修改Linux root用户名 后提示network manager启动失败修复
  4. iOS之UIview动画
  5. GDCM:gdcm::Fragment的测试程序
  6. 如何在大流量场景下云淡风轻地进行线上发布?
  7. Java开发人员必须看到的13个Decks保持更新
  8. Python(4)--Pycharm安装、使用小技巧
  9. 【转】21世纪律师办公自动化的一个调查
  10. 网络编程之OSI七层协议
  11. Spring StringUtils#cleanPath method 浅析
  12. 插桩 java_“插桩”式技术
  13. 二阶魔方万能还原公式_2阶魔方教程简单口诀(二阶魔方还原公式口决是什么?)...
  14. 非平衡电桥电阻计算_用非平衡电桥如何测量电阻_非平衡电桥测量电阻详解
  15. 西数trex自动版u盘版_当移动硬盘遇上它,改变生活:西数My Passport随行版
  16. 动网新闻系统IWMS中实现带标题幻灯片的功能效果
  17. vivado中Cordic IP核使用——计算正余弦(sin/cos)
  18. 模拟电路技术之基础知识(二)
  19. springboot集成rabbitmq商品秒杀业务实战(流量削峰)
  20. 跳绳机 高频霍尔开关 MH253

热门文章

  1. [读书笔记]小决心还是大决心
  2. 计算机电子书 2018 BiliDrive 备份
  3. Hive数据分析案例——汽车销售数据分析
  4. 笔记:HPlus模板 单选框
  5. ios visio流程图_微软visio绘图查看器ios版下载|Microsoft Visio Viewer iphone/ipad版下载 v1.17 - 跑跑车苹果网...
  6. Python基础:安装包
  7. python安装包————————百度网盘
  8. 计算机组成第五章课后答案,计算机组成原理第5章部分习题参考答案
  9. 常见的Python解释器,你了解多少?
  10. ubuntu下非常好用的PDF阅读器