`
star65225692
  • 浏览: 277160 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

C#通过Socket进行HttP/HTTPS操作网页的速度问题

 
阅读更多

    毫无疑问由于HTTP协议是基于TCP/IP的,而HttpWebRequest在封装过程中的一些处理或多或少的会影响到访问速度;至于影响多少,我在前段时间做一个国外网站操作的时候简单对比了下,HttpWebRequest和Socket原生操作的速度相差大概在5倍以上;

   很多时候其实我们并不是很关注速度影响,但是实际应用过程中就会遇到有客户要求的飞速(当然不排除一些客户认为线程越多速度越快)。

简单谈了下以上4个问题,其实还很是很片面,鉴于个人表达能力有限,有些东西还需要大家在实践中去认识了解;下面就来着重看下通过Socket操作HTTP/HTTPS;


前面我们已经知道了简单的HTTP协议,也知道HTTP是基于TCP/IP协议的,对于有网络经验的同学,我们就可以直接写Socket提交HTTP协议,这一步相对比较简单,我们直接看一下代码就OK了:

static byte[] InternalSocketHttp(IPEndPoint endpoint,

           HttpArgs args,
其实从事咖啡厅服务并不丢人
           HttpMethod method)

        {

            using (Socket sK = new Socket(AddressFamily.InterNetwork,

                        SocketType.Stream,

                        ProtocolType.Tcp))

            {

                try

                {

                    sK.Connect(endpoint);

                    if (sK.Connected)

                    {

                        byte[] buff = ParseHttpArgs(method, args);

                        if (sK.Send(buff) > 0)

                        {

                            return ParseResponse(endpoint,sK,args);

                        }

                    }

                }

                catch (Exception ex)

                {

                    Console.WriteLine(ex.Message);

                }

            }

            return null;

        }

其中有2个比较重要的函数一个是ParseHttpArgs(),另外一个是ParseResponse();

先看第一个函数:

static byte[] ParseHttpArgs(HttpMethod method, HttpArgs args)

        {

            StringBuilder bulider = new StringBuilder();

            if (method.Equals(HttpMethod.POST))

            {

                bulider.AppendLine(string.Format("POST {0} HTTP/1.1",

                    args.Url));

                bulider.AppendLine("Content-Type: application/x-www-form-urlencoded");

            }

            else

            {

                bulider.AppendLine(string.Format("GET {0} HTTP/1.1",

                args.Url));

            }

            bulider.AppendLine(string.Format("Host: {0}",

                args.Host));

            bulider.AppendLine("User-Agent: Mozilla/5.0 (Windows NT 6.1; IE 9.0)");

            if (!string.IsNullOrEmpty(args.Referer))

                bulider.AppendLine(string.Format("Referer: {0}",

                    args.Referer));

            bulider.AppendLine("Connection: keep-alive");

            bulider.AppendLine(string.Format("Accept: {0}",

                args.Accept));

            bulider.AppendLine(string.Format("Cookie: {0}",

                args.Cookie));

            if (method.Equals(HttpMethod.POST))

            {

                bulider.AppendLine(string.Format("Content-Length: {0}\r\n",

                   Encoding.Default.GetBytes(args.Body).Length));

                bulider.Append(args.Body);

            }

            else

            {

                bulider.Append("\r\n");

            }

            string header = bulider.ToString();

            return Encoding.Default.GetBytes(header);

        }

通过上面的代码,很清晰的我们就能看到ParseHttpArgs其实就是将HttpArgs的一些属性填充为HTTP协议,并返回其二进制内容用于Socket提交,其中值得注意的一点就是在HTTP协议头完毕后实际上需要一个空行

分享到:
评论

相关推荐

    C# SOCKET TCP UDP测试工具及源代码

    在IT行业中,网络通信是至关重要的一个领域,而C#作为一种功能强大的编程语言,...通过阅读源代码,不仅可以学习到基本的SOCKET操作,还可以了解到错误处理、并发连接管理等高级话题,有助于提升开发者的网络编程能力。

    C#网络编程高级篇之网页游戏辅助程序设计软件包

    在网页游戏辅助程序设计中,C#主要负责与服务器进行数据交互、解析游戏协议、模拟用户操作、自动化任务执行等功能。开发者通常需要了解HTTP协议,因为大部分网页游戏的数据交换是基于HTTP或HTTPS的。此外,还要熟悉...

    基于socket的浏览器

    创建一个基于Socket的浏览器意味着我们不再依赖于WebBrowser控件,而是直接通过Socket与HTTP服务器进行交互,发送HTTP请求并接收响应数据。 在该浏览器项目中,开发者选择了不使用WebBrowser控件,原因可能是为了更...

    C#.Net网络程序开发

    C#.Net网络程序开发是基于Microsoft的.NET框架进行网络应用构建的技术。C#语言作为.NET框架的主要编程语言,为开发者提供了强大的工具和丰富的库来创建高效、可维护的网络应用程序。在C#.Net中,我们可以利用多种...

    C#开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨

    在C#开发中,Socket网络编程是构建网络应用程序的基础,它涉及到TCP/IP层次模型、端口和报文等多个关键概念。首先,我们需要理解TCP/IP模型,这是所有网络通信的理论框架。 1. **TCP/IP层次模型** TCP/IP模型分为...

    c#局域网聊天工具socket制作过程讲解与原代码讲解

    标题和描述均聚焦于"C#局域网聊天工具socket制作过程讲解与原代码讲解",以下将基于给定的部分内容,深入解析相关的IT知识点。 ### C#局域网聊天工具Socket编程基础 #### 1. 网络通讯协议:TCP与UDP - **TCP...

    c# network programming 英文版

    《C# Network Programming》是关于使用C#进行网络编程的经典著作,它深入浅出地介绍了如何利用.NET Framework的网络功能来构建高效、可靠的网络应用程序。这本书对于任何希望在C#环境中进行网络编程的开发者来说,都...

    C#秒杀程序源码 仅供学习

    Socket是网络编程的基本组件,它允许应用程序通过TCP/IP协议进行数据传输。 首先,从给出的代码中可以看到,`MiaoSha`类继承自`System.Web.UI.Page`,表明这是一个ASP.NET Web Forms应用程序中的页面。页面加载事件...

    C#网络编程.rar

    总之,C#网络编程涵盖了许多层面,从基础的Socket操作到复杂的网络应用架构,开发者需要理解网络协议原理,掌握C#提供的网络编程API,并灵活运用异步编程和并发技术,以构建高效、安全的网络应用程序。

    C#完整的通信代码

    在C#中,可以使用Socket类来创建P2P连接。对于点对多或多播通信,可以通过加入特定的多播组来实现广播消息。 同步通信意味着发送和接收数据的操作是顺序执行的,等待一个操作完成才能进行下一个操作。异步通信则...

    C#网络应用高级编程(有源码)

    通过C#的Socket类,开发者可以直接操作这些底层协议,实现自定义的网络通信。 其次,套接字编程是C#网络应用的核心部分。C#的System.Net.Sockets命名空间提供了丰富的类来支持套接字操作,如TcpClient、TcpListener...

    c#经典编程范例50讲

    这些实例将覆盖C#的各个方面,通过实践加深理解,使您能够灵活运用C#进行软件开发。每讲都将提供详细的步骤和解释,确保您能逐步掌握每个知识点。无论您是初学者还是有一定经验的开发者,"C#经典编程范例50讲"都是...

    C# Network Library.zip

    而WebClient和HttpClient则为HTTP协议提供了简单易用的API,方便进行网页数据的下载和上传。 二、TCP/IP通信 TCP(传输控制协议)是网络通信中最常用的协议之一,提供了可靠的数据传输。C#中的TcpClient和Tcp...

    C#秒杀程序源码

    这个秒杀程序的核心思路是模拟用户快速点击购买的行为,通过Socket直接与服务器建立连接,发送请求并接收响应,以提高抢购的成功率。这种做法在实际应用中可能需要考虑以下几点: 1. **性能优化**:秒杀场景下,高...

    C# 3.0 Network Programming

    ### C# 3.0 网络编程详解 #### 1. 网络编程概念及TCP/IP协议 在当今计算机技术飞速发展的时代,网络编程已成为软件开发的重要组成部分。随着微软.NET Framework的推出,程序员们有了一个更加统一且强大的网络编程...

    c#网络应用编程讲解

    此外,HttpClient还支持异步操作,提高应用程序的响应速度。 WebSocket是一种双向通信协议,为实时应用提供了低延迟、高效率的解决方案。在C#中,可以使用System.Net.WebSockets命名空间中的WebSocket类来实现...

    C#网络应用编程 精典

    C#引入了async/await关键字,使得异步操作更加直观且易于管理,避免了阻塞主线程,从而提升应用的响应速度。 八、分布式系统与微服务 随着技术的发展,越来越多的网络应用采用微服务架构。C#可以借助如ASP.NET Core...

    测试c#基础考题测试

    - **数组排序:**C#可以通过内置的方法对数组进行排序。 **Question6.** - **选项含义不明,但从题目编号推测可能与内存管理有关。** - **知识点:** - **内存管理:**C#中的内存管理包括堆内存和栈内存,了解...

    C# 程序开发范例宝典04

    7. **文件I/O操作**:C#提供了丰富的类库用于读写文件、流处理,方便进行数据持久化。 8. **网络编程**:C#的System.Net命名空间包含了许多用于网络通信的类,如Socket、TcpClient/TcpListener等。 9. **GUI编程**...

    C#网络编程---源码

    在C#中,我们可以使用System.Net命名空间下的Socket类来操作TCP和UDP协议。TCP编程通常涉及建立连接、发送和接收数据、关闭连接等步骤。以下是一些关键概念: 1. **Socket对象**:它是TCP和UDP通信的基础,可以通过...

Global site tag (gtag.js) - Google Analytics