毫无疑问由于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协议头完毕后实际上需要一个空行
分享到:
相关推荐
在IT行业中,网络通信是至关重要的一个领域,而C#作为一种功能强大的编程语言,...通过阅读源代码,不仅可以学习到基本的SOCKET操作,还可以了解到错误处理、并发连接管理等高级话题,有助于提升开发者的网络编程能力。
在网页游戏辅助程序设计中,C#主要负责与服务器进行数据交互、解析游戏协议、模拟用户操作、自动化任务执行等功能。开发者通常需要了解HTTP协议,因为大部分网页游戏的数据交换是基于HTTP或HTTPS的。此外,还要熟悉...
创建一个基于Socket的浏览器意味着我们不再依赖于WebBrowser控件,而是直接通过Socket与HTTP服务器进行交互,发送HTTP请求并接收响应数据。 在该浏览器项目中,开发者选择了不使用WebBrowser控件,原因可能是为了更...
C#.Net网络程序开发是基于Microsoft的.NET框架进行网络应用构建的技术。C#语言作为.NET框架的主要编程语言,为开发者提供了强大的工具和丰富的库来创建高效、可维护的网络应用程序。在C#.Net中,我们可以利用多种...
在C#开发中,Socket网络编程是构建网络应用程序的基础,它涉及到TCP/IP层次模型、端口和报文等多个关键概念。首先,我们需要理解TCP/IP模型,这是所有网络通信的理论框架。 1. **TCP/IP层次模型** TCP/IP模型分为...
标题和描述均聚焦于"C#局域网聊天工具socket制作过程讲解与原代码讲解",以下将基于给定的部分内容,深入解析相关的IT知识点。 ### C#局域网聊天工具Socket编程基础 #### 1. 网络通讯协议:TCP与UDP - **TCP...
《C# Network Programming》是关于使用C#进行网络编程的经典著作,它深入浅出地介绍了如何利用.NET Framework的网络功能来构建高效、可靠的网络应用程序。这本书对于任何希望在C#环境中进行网络编程的开发者来说,都...
Socket是网络编程的基本组件,它允许应用程序通过TCP/IP协议进行数据传输。 首先,从给出的代码中可以看到,`MiaoSha`类继承自`System.Web.UI.Page`,表明这是一个ASP.NET Web Forms应用程序中的页面。页面加载事件...
总之,C#网络编程涵盖了许多层面,从基础的Socket操作到复杂的网络应用架构,开发者需要理解网络协议原理,掌握C#提供的网络编程API,并灵活运用异步编程和并发技术,以构建高效、安全的网络应用程序。
在C#中,可以使用Socket类来创建P2P连接。对于点对多或多播通信,可以通过加入特定的多播组来实现广播消息。 同步通信意味着发送和接收数据的操作是顺序执行的,等待一个操作完成才能进行下一个操作。异步通信则...
通过C#的Socket类,开发者可以直接操作这些底层协议,实现自定义的网络通信。 其次,套接字编程是C#网络应用的核心部分。C#的System.Net.Sockets命名空间提供了丰富的类来支持套接字操作,如TcpClient、TcpListener...
这些实例将覆盖C#的各个方面,通过实践加深理解,使您能够灵活运用C#进行软件开发。每讲都将提供详细的步骤和解释,确保您能逐步掌握每个知识点。无论您是初学者还是有一定经验的开发者,"C#经典编程范例50讲"都是...
而WebClient和HttpClient则为HTTP协议提供了简单易用的API,方便进行网页数据的下载和上传。 二、TCP/IP通信 TCP(传输控制协议)是网络通信中最常用的协议之一,提供了可靠的数据传输。C#中的TcpClient和Tcp...
这个秒杀程序的核心思路是模拟用户快速点击购买的行为,通过Socket直接与服务器建立连接,发送请求并接收响应,以提高抢购的成功率。这种做法在实际应用中可能需要考虑以下几点: 1. **性能优化**:秒杀场景下,高...
### C# 3.0 网络编程详解 #### 1. 网络编程概念及TCP/IP协议 在当今计算机技术飞速发展的时代,网络编程已成为软件开发的重要组成部分。随着微软.NET Framework的推出,程序员们有了一个更加统一且强大的网络编程...
此外,HttpClient还支持异步操作,提高应用程序的响应速度。 WebSocket是一种双向通信协议,为实时应用提供了低延迟、高效率的解决方案。在C#中,可以使用System.Net.WebSockets命名空间中的WebSocket类来实现...
C#引入了async/await关键字,使得异步操作更加直观且易于管理,避免了阻塞主线程,从而提升应用的响应速度。 八、分布式系统与微服务 随着技术的发展,越来越多的网络应用采用微服务架构。C#可以借助如ASP.NET Core...
- **数组排序:**C#可以通过内置的方法对数组进行排序。 **Question6.** - **选项含义不明,但从题目编号推测可能与内存管理有关。** - **知识点:** - **内存管理:**C#中的内存管理包括堆内存和栈内存,了解...
7. **文件I/O操作**:C#提供了丰富的类库用于读写文件、流处理,方便进行数据持久化。 8. **网络编程**:C#的System.Net命名空间包含了许多用于网络通信的类,如Socket、TcpClient/TcpListener等。 9. **GUI编程**...
在C#中,我们可以使用System.Net命名空间下的Socket类来操作TCP和UDP协议。TCP编程通常涉及建立连接、发送和接收数据、关闭连接等步骤。以下是一些关键概念: 1. **Socket对象**:它是TCP和UDP通信的基础,可以通过...