日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747


介紹幾種 .NET 中常用的網(wǎng)絡(luò)編程類(lèi)型及其示例:

1. Socket 編程

Socket 是最基礎(chǔ)、最原始的網(wǎng)絡(luò)編程方式之一,它提供了一組 API 來(lái)實(shí)現(xiàn)數(shù)據(jù)傳輸和通信。使用 Socket 編程時(shí)需要手動(dòng)處理與底層協(xié)議和繁瑣的細(xì)節(jié),但同時(shí)也具有靈活性和可定制性。

以下是基于 TCP 協(xié)議實(shí)現(xiàn)的 Echo Server 示例:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class EchoServer
{
public static void Main()
{
try
{
// 創(chuàng)建一個(gè) TCP/IP socket 監(jiān)聽(tīng)指定端口
var port = 12345;
var listener = new TcpListener(IPAddress.Any, port);
listener.Start();
Console.WriteLine($"Echo server is listening on port {port}...");
while (true)
{
// 等待客戶(hù)端連接
using (var client = listener.AcceptTcpClient())
{
Console.WriteLine($"Client connected from {client.Client.RemoteEndPoint}");
// 獲取 client 的 NetworkStream 并讀取客戶(hù)端發(fā)送來(lái)的數(shù)據(jù)
using (var stream = client.GetStream())
{
var buffer = new byte[1024];
var bytesRead = stream.Read(buffer, 0, buffer.Length);
// 將客戶(hù)端發(fā)送的數(shù)據(jù)回傳
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 通信的最基礎(chǔ)和原始的 API。它們提供了一個(gè)抽象類(lèi),用于發(fā)送和接收 HTTP 和 HTTPS 等 Web 請(qǐng)求和響應(yīng)。

以下是使用 WebRequest/WebResponse 發(fā)送 GET 請(qǐng)求并讀取響應(yīng)的示例:

using System;
using System.IO;
using System.Net;
public class HttpExample
{
public static void Main()
{
try
{
// 創(chuàng)建 GET 請(qǐng)求,并設(shè)置請(qǐng)求頭
var url = "https://www.example.com";
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = "Mozilla/5.0";
// 發(fā)送請(qǐng)求并獲取響應(yīng)
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}");
// 讀取響應(yīng)內(nèi)容
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 中更方便和高級(jí)的網(wǎng)絡(luò)編程 API 之一,它支持各種 HTTP 和 HTTPS 請(qǐng)求、響應(yīng)和通信。使用 HttpClient 可以輕松地實(shí)現(xiàn)網(wǎng)絡(luò)連接池、緩存等特性。

以下是使用 HttpClient 發(fā)送 GET 請(qǐng)求并讀取響應(yīng)的示例:

using System;
using System.Net.Http;
using System.Threading.Tasks;
public class HttpExample
{
public static async Task Main()
{
try
{
// 創(chuàng)建 HttpClient 實(shí)例
using (var client = new HttpClient())
{
// 發(fā)送 GET 請(qǐng)求并獲取響應(yīng)
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}");
// 讀取響應(yīng)內(nèi)容
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
}
}

4. SignalR 框架

SignalR 是一個(gè)開(kāi)源的 ASP.NET Core 應(yīng)用程序框架,用于實(shí)現(xiàn)實(shí)時(shí)、雙向、即時(shí)通信。它基于 WebSockets 協(xié)議并提供了類(lèi)似于 WebSocket 的功能,同時(shí)也支持服務(wù)器推送事件和長(zhǎng)輪詢(xún)等傳輸方式,使得客戶(hù)端能夠?qū)崟r(shí)接收到服務(wù)器的更新和推送消息。SignalR 在實(shí)現(xiàn) Web 聊天室、在線游戲、實(shí)時(shí)監(jiān)控等方面廣泛應(yīng)用。

以下是 SignalR 框架的主要特點(diǎn):

- 實(shí)時(shí)性:無(wú)論是使用 WebSockets 還是其他傳輸方式,SignalR 都能夠提供實(shí)時(shí)、雙向的通信,使得客戶(hù)端和服務(wù)器之間能夠立即響應(yīng)對(duì)方的行為。

- 跨平臺(tái):SignalR 支持跨平臺(tái)開(kāi)發(fā),可以在 windows、linux 或者 macOS 等系統(tǒng)上運(yùn)行。

- 可擴(kuò)展性:SignalR 具有良好的可擴(kuò)展性,在需要進(jìn)行橫向擴(kuò)展的情況下能夠輕松地增加更多的服務(wù)器節(jié)點(diǎn)。

以下是 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)
{
// 服務(wù)器向客戶(hù)端發(fā)送消息
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
// index.html
var connection = new signalR.HubConnectionBuilder()
.withUrl("/myhub")
.build();
connection.on("ReceiveMessage", function (user, message) {
// 處理從服務(wù)器接收到的消息
});
connection.start().then(function () {
// 連接成功,可以開(kāi)始發(fā)送消息
});

5. gRPC 框架

gRPC 是一個(gè)高性能、開(kāi)源的遠(yuǎn)程過(guò)程調(diào)用(RPC)框架,它支持多種語(yǔ)言和平臺(tái),并使用 Protocol Buffers 作為數(shù)據(jù)序列化格式。相對(duì)于傳統(tǒng)的 RESTful API,gRPC 具有更高的效率、更強(qiáng)的類(lèi)型檢查和更易于擴(kuò)展等優(yōu)點(diǎn),在微服務(wù)架構(gòu)等場(chǎng)景下廣泛應(yīng)用。

以下是 gRPC 框架的主要特點(diǎn):

- 高性能:gRPC 基于 Protobuf 等二進(jìn)制協(xié)議,具有比基于 XML 或 JSON 的協(xié)議更高的性能。

- 跨平臺(tái):gRPC 支持跨多種編程語(yǔ)言和平臺(tái)進(jìn)行開(kāi)發(fā)和部署,包括 C++、C#、JAVA、Python/ target=_blank class=infotextkey>Python、Go 等。

- 易于擴(kuò)展:gRPC 的接口定義語(yǔ)言(IDL)和自動(dòng)生成的代碼能夠方便地進(jìn)行版本化和演進(jìn),同時(shí)還具有可靠性、安全性等特點(diǎn)。

以下是 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 庫(kù)

RestSharp 是一個(gè)開(kāi)源的 .NET HTTP 客戶(hù)端庫(kù),用于發(fā)送和接收 RESTful 風(fēng)格的 HTTP 請(qǐng)求和響應(yīng)。它支持自定義請(qǐng)求頭、請(qǐng)求參數(shù)、請(qǐng)求體以及各種 HTTP 方法等功能,還提供了方便的異步 API。

以下是 RestSharp 庫(kù)的主要特點(diǎn):

- 靈活性:RestSharp 可以靈活地處理任意類(lèi)型的請(qǐng)求和響應(yīng),包括 XML、JSON、URL 編碼等格式。

- 易于使用:RestSharp 的 API 設(shè)計(jì)清晰、簡(jiǎn)單,可以輕松地構(gòu)建 HTTP 請(qǐng)求和處理響應(yīng)。

- 可擴(kuò)展性:RestSharp 支持插件和擴(kuò)展,可以輕松地定制和修改各種功能。

以下是 RestSharp 庫(kù)的示例代碼:

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}");
}

分享到:
標(biāo)簽:NET
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定