您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > .NET

介绍几种 .NET 中常用的网络编程类型及其示例

时间:2023-05-09 14:34:51  来源:今日头条  作者:小乖兽技术


介绍几种 .NET 中常用的网络编程类型及其示例:

1. Socket 编程

Socket 是最基础、最原始的网络编程方式之一,它提供了一组 API 来实现数据传输和通信。使用 Socket 编程时需要手动处理与底层协议和繁琐的细节,但同时也具有灵活性和可定制性。

以下是基于 TCP 协议实现的 Echo Server 示例:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class EchoServer
{
public static void MAIn()
{
try
{
// 创建一个 TCP/IP socket 监听指定端口
var port = 12345;
var listener = new TcpListener(IPAddress.Any, port);
listener.Start();
Console.WriteLine($"Echo server is listening on port {port}...");
while (true)
{
// 等待客户端连接
using (var client = listener.AcceptTcpClient())
{
Console.WriteLine($"Client connected from {client.Client.RemoteEndPoint}");
// 获取 client 的 NetworkStream 并读取客户端发送来的数据
using (var stream = client.GetStream())
{
var buffer = new byte[1024];
var bytesRead = stream.Read(buffer, 0, buffer.Length);
// 将客户端发送的数据回传
var input = Encoding.UTF8.GetString(buffer, 0, bytesRead);
var output = $"Echo: {input}";
var data = Encoding.UTF8.GetBytes(output);
stream.Write(data, 0, data.Length);
Console.WriteLine($"Received {input}, echoed back to client.");
}
}
}
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
}
}

2. WebRequest/WebResponse

WebRequest 和 WebResponse 是 .NET 中用于 Web 通信的最基础和原始的 API。它们提供了一个抽象类,用于发送和接收 HTTP 和 HTTPS 等 Web 请求和响应。

以下是使用 WebRequest/WebResponse 发送 GET 请求并读取响应的示例:

using System;
using System.IO;
using System.Net;
public class HttpExample
{
public static void Main()
{
try
{
// 创建 GET 请求,并设置请求头
var url = "https://www.example.com";
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = "Mozilla/5.0";
// 发送请求并获取响应
using (var response = (HttpWebResponse)request.GetResponse())
{
Console.WriteLine($"Status code: {(int)response.StatusCode} {response.StatusDescription}");
Console.WriteLine($"Content type: {response.ContentType}");
Console.WriteLine($"Content length: {response.ContentLength}");
// 读取响应内容
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
var responseBody = reader.ReadToEnd();
Console.WriteLine(responseBody);
}
}
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
}
}

3. HttpClient

HttpClient 是 .NET 中更方便和高级的网络编程 API 之一,它支持各种 HTTP 和 HTTPS 请求、响应和通信。使用 HttpClient 可以轻松地实现网络连接池、缓存等特性。

以下是使用 HttpClient 发送 GET 请求并读取响应的示例:

using System;
using System.Net.Http;
using System.Threading.Tasks;
public class HttpExample
{
public static async Task Main()
{
try
{
// 创建 HttpClient 实例
using (var client = new HttpClient())
{
// 发送 GET 请求并获取响应
var url = "https://www.example.com";
var response = await client.GetAsync(url);
Console.WriteLine($"Status code: {(int)response.StatusCode} {response.ReasonPhrase}");
Console.WriteLine($"Content type: {response.Content.Headers.ContentType.MediaType}");
Console.WriteLine($"Content length: {response.Content.Headers.ContentLength}");
// 读取响应内容
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
}
}

4. SignalR 框架

SignalR 是一个开源的 ASP.NET Core 应用程序框架,用于实现实时、双向、即时通信。它基于 WebSockets 协议并提供了类似于 WebSocket 的功能,同时也支持服务器推送事件和长轮询等传输方式,使得客户端能够实时接收到服务器的更新和推送消息。SignalR 在实现 Web 聊天室、在线游戏、实时监控等方面广泛应用。

以下是 SignalR 框架的主要特点:

- 实时性:无论是使用 WebSockets 还是其他传输方式,SignalR 都能够提供实时、双向的通信,使得客户端和服务器之间能够立即响应对方的行为。

- 跨平台:SignalR 支持跨平台开发,可以在 windowslinux 或者 macOS 等系统上运行。

- 可扩展性:SignalR 具有良好的可扩展性,在需要进行横向扩展的情况下能够轻松地增加更多的服务器节点。

以下是 SignalR 框架的示例代码:

// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 启用 SignalR 中间件
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHub>("/myhub");
});
}
// MyHub.cs
public class MyHub : Hub
{
public async Task SendMessage(string user, string message)
{
// 服务器向客户端发送消息
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
// index.html
var connection = new signalR.HubConnectionBuilder()
.withUrl("/myhub")
.build();
connection.on("ReceiveMessage", function (user, message) {
// 处理从服务器接收到的消息
});
connection.start().then(function () {
// 连接成功,可以开始发送消息
});

5. gRPC 框架

gRPC 是一个高性能、开源的远程过程调用(RPC)框架,它支持多种语言和平台,并使用 Protocol Buffers 作为数据序列化格式。相对于传统的 RESTful API,gRPC 具有更高的效率、更强的类型检查和更易于扩展等优点,在微服务架构等场景下广泛应用。

以下是 gRPC 框架的主要特点:

- 高性能:gRPC 基于 Protobuf 等二进制协议,具有比基于 XML 或 JSON 的协议更高的性能。

- 跨平台:gRPC 支持跨多种编程语言和平台进行开发和部署,包括 C++、C#、JAVAPython/ target=_blank class=infotextkey>Python、Go 等。

- 易于扩展:gRPC 的接口定义语言(IDL)和自动生成的代码能够方便地进行版本化和演进,同时还具有可靠性、安全性等特点。

以下是 gRPC 框架的示例代码:

// hello.proto
syntax = "proto3";
package hello;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
// Server.cs
public class GreeterService : Greeter.GreeterBase
{
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
// Client.cs
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(new HelloRequest { Name = "World" });
Console.WriteLine(reply.Message);

6. RestSharp 库

RestSharp 是一个开源的 .NET HTTP 客户端库,用于发送和接收 RESTful 风格的 HTTP 请求和响应。它支持自定义请求头、请求参数、请求体以及各种 HTTP 方法等功能,还提供了方便的异步 API。

以下是 RestSharp 库的主要特点:

- 灵活性:RestSharp 可以灵活地处理任意类型的请求和响应,包括 XML、JSON、URL 编码等格式。

- 易于使用:RestSharp 的 API 设计清晰、简单,可以轻松地构建 HTTP 请求和处理响应。

- 可扩展性:RestSharp 支持插件和扩展,可以轻松地定制和修改各种功能。

以下是 RestSharp 库的示例代码:

var client = new RestClient("https://api.example.com");
var request = new RestRequest("/resource/{id}", Method.GET);
request.AddUrlSegment("id", "123");
request.AddParameter("param", "value");
var response = await client.ExecuteAsync(request);
if (response.IsSuccessful)
{
var content = response.Content;
Console.WriteLine(content);
}
else
{
Console.WriteLine($"{response.StatusCode}: {response.ErrorMessage}");
}


Tags:.NET   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
.Net开发中十种常见的内存错误以及相应的解决方案
在.Net开发中,为内存管理方面提供了许多便利,但仍然存在一些常见的错误和陷阱。这些错误可能导致内存泄漏、性能下降、异常抛出等问题,严重影响应用程序的稳定性和性能。在软件...【详细内容】
2024-03-26  Search: .NET  点击:(12)  评论:(0)  加入收藏
.NET配置文件大揭秘:轻松读取JSON、XML、INI和环境变量
概述:.NET中的IConfiguration接口提供了一种多源读取配置信息的灵活机制,包括JSON、XML、INI文件和环境变量。通过示例,清晰演示了从这些不同源中读取配置的方法,使配置获取变得...【详细内容】
2023-12-28  Search: .NET  点击:(92)  评论:(0)  加入收藏
.Net开发都应当掌握的泛型基础知识集合
在C#编程语言中,泛型是一项非常强大和重要的功能。它允许我们编写更加灵活和通用的代码,同时提高代码的可重用性和性能。本文将介绍C#泛型的一些关键知识点,帮助读者理解和应用...【详细内容】
2023-12-25  Search: .NET  点击:(124)  评论:(0)  加入收藏
作为 .NET 开发人员,我为什么开始使用 Python?
作者 | Alex Maher编译 | 小欧作为一名 .NET 开发人员,很长一段时间以来,我一直关注 C# 和 .NET 的出色工具和功能。但我最近开始使用 Python,感觉非常棒。这里申明一点,这篇文...【详细内容】
2023-12-25  Search: .NET  点击:(143)  评论:(0)  加入收藏
.NET领域性能最好的对象映射框架Mapster使用方法
Mapster是一个开源的.NET对象映射库,它提供了一种简单而强大的方式来处理对象之间的映射。在本文中,我将详细介绍如何在.NET中使用Mapster,并提供一些实例和源代码。和其它框架...【详细内容】
2023-12-22  Search: .NET  点击:(79)  评论:(0)  加入收藏
.NET Core 3.1 升级到 .NET 8,看看都有哪些变化
.NET Core 3.1 已经用了很长一段时间,其实在 2022 年的年底微软已经不提供支持了,后面的一个 LTS 版本 .NET 6 也会在 2024 年 11 月终止支持,所以直接升级到 .NET 8 是最好的...【详细内容】
2023-12-08  Search: .NET  点击:(192)  评论:(0)  加入收藏
.NET Core的中间件来对Web API进行流量限制实现方法
在.NET Core中,我们可以使用ASP.NET Core的中间件来对Web API进行流量限制。ASP.NET Core提供了一个名为RateLimit的开源库,可以方便地实现流量限制功能。下面将详细介绍如何...【详细内容】
2023-12-06  Search: .NET  点击:(177)  评论:(0)  加入收藏
微软官方出品微服务架构:十个.Net开源项目
1、一个高性能类型安全的.NET枚举实用开源库Enums.NET是一个.NET枚举实用程序库,专注于为枚举提供丰富的操作方法。它支持.NET Framework和.Net Core。它主要优点表现在类型...【详细内容】
2023-12-06  Search: .NET  点击:(132)  评论:(0)  加入收藏
.NET开源的处理分布式事务的解决方案
前言在分布式系统中,由于各个系统服务之间的独立性和网络通信的不确定性,要确保跨系统的事务操作的最终一致性是一项重大的挑战。今天给大家推荐一个.NET开源的处理分布式事务...【详细内容】
2023-11-30  Search: .NET  点击:(173)  评论:(0)  加入收藏
深入 .NET 异步编程:Task 与 ValueTask 的区别与选择
在 .NET 中,Task 和 ValueTask 都是用于表示异步操作的类型,但它们有一些重要的区别。TaskTask 是最常见的表示异步操作的类型。它通常用于表示耗时的、异步的操作,比如从文件...【详细内容】
2023-11-26  Search: .NET  点击:(190)  评论:(0)  加入收藏
▌简易百科推荐
.Net开发中十种常见的内存错误以及相应的解决方案
在.Net开发中,为内存管理方面提供了许多便利,但仍然存在一些常见的错误和陷阱。这些错误可能导致内存泄漏、性能下降、异常抛出等问题,严重影响应用程序的稳定性和性能。在软件...【详细内容】
2024-03-26  小乖兽技术  今日头条  Tags:.Net   点击:(12)  评论:(0)  加入收藏
.NET配置文件大揭秘:轻松读取JSON、XML、INI和环境变量
概述:.NET中的IConfiguration接口提供了一种多源读取配置信息的灵活机制,包括JSON、XML、INI文件和环境变量。通过示例,清晰演示了从这些不同源中读取配置的方法,使配置获取变得...【详细内容】
2023-12-28  架构师老卢  今日头条  Tags:.NET   点击:(92)  评论:(0)  加入收藏
.Net开发都应当掌握的泛型基础知识集合
在C#编程语言中,泛型是一项非常强大和重要的功能。它允许我们编写更加灵活和通用的代码,同时提高代码的可重用性和性能。本文将介绍C#泛型的一些关键知识点,帮助读者理解和应用...【详细内容】
2023-12-25  小乖兽技术  今日头条  Tags:.Net   点击:(124)  评论:(0)  加入收藏
作为 .NET 开发人员,我为什么开始使用 Python?
作者 | Alex Maher编译 | 小欧作为一名 .NET 开发人员,很长一段时间以来,我一直关注 C# 和 .NET 的出色工具和功能。但我最近开始使用 Python,感觉非常棒。这里申明一点,这篇文...【详细内容】
2023-12-25    51CTO  Tags:.NET   点击:(143)  评论:(0)  加入收藏
.NET Core 3.1 升级到 .NET 8,看看都有哪些变化
.NET Core 3.1 已经用了很长一段时间,其实在 2022 年的年底微软已经不提供支持了,后面的一个 LTS 版本 .NET 6 也会在 2024 年 11 月终止支持,所以直接升级到 .NET 8 是最好的...【详细内容】
2023-12-08  不止dotNET  微信公众号  Tags:.NET   点击:(192)  评论:(0)  加入收藏
.NET Core的中间件来对Web API进行流量限制实现方法
在.NET Core中,我们可以使用ASP.NET Core的中间件来对Web API进行流量限制。ASP.NET Core提供了一个名为RateLimit的开源库,可以方便地实现流量限制功能。下面将详细介绍如何...【详细内容】
2023-12-06  架构师老卢  今日头条  Tags:.NET   点击:(177)  评论:(0)  加入收藏
微软官方出品微服务架构:十个.Net开源项目
1、一个高性能类型安全的.NET枚举实用开源库Enums.NET是一个.NET枚举实用程序库,专注于为枚举提供丰富的操作方法。它支持.NET Framework和.Net Core。它主要优点表现在类型...【详细内容】
2023-12-06  编程乐趣  今日头条  Tags:.Net   点击:(132)  评论:(0)  加入收藏
.NET开源的处理分布式事务的解决方案
前言在分布式系统中,由于各个系统服务之间的独立性和网络通信的不确定性,要确保跨系统的事务操作的最终一致性是一项重大的挑战。今天给大家推荐一个.NET开源的处理分布式事务...【详细内容】
2023-11-30  追逐时光者  微信公众号  Tags:.NET   点击:(173)  评论:(0)  加入收藏
深入 .NET 异步编程:Task 与 ValueTask 的区别与选择
在 .NET 中,Task 和 ValueTask 都是用于表示异步操作的类型,但它们有一些重要的区别。TaskTask 是最常见的表示异步操作的类型。它通常用于表示耗时的、异步的操作,比如从文件...【详细内容】
2023-11-26  架构师老卢  微信公众号  Tags: .NET   点击:(190)  评论:(0)  加入收藏
.NET字符串存储:解析常量与动态字符串,深入了解内存机制
在 .NET 中,字符串是不可变的,这意味着一旦创建,字符串的内容就不能被修改。字符串在内存中以不同的方式存储,具体取决于它是常量字符串还是动态创建的字符串。常量字符串常量字...【详细内容】
2023-11-25  架构师老卢  微信公众号  Tags:.NET   点击:(195)  评论:(0)  加入收藏
站内最新
站内热门
站内头条