上篇文章講述了C#處理文件系統I/O知識點,本文將介紹C#網路編程知識點。隨著信息技術的不斷發展,網路編程在.NET開發中變得愈發重要。無論是構建Web應用、實現實時通信,還是處理分散式系統,C#網路編程都是必備的技能。以下是.NET開發者在網路編程中應該掌握的關鍵知識點。 一、http請求知識點 ...
上篇文章講述了C#處理文件系統I/O知識點,本文將介紹C#網路編程知識點。隨著信息技術的不斷發展,網路編程在.NET開發中變得愈發重要。無論是構建Web應用、實現實時通信,還是處理分散式系統,C#網路編程都是必備的技能。以下是.NET開發者在網路編程中應該掌握的關鍵知識點。
一、http請求知識點
在C#中進行HTTP請求是.NET開發中常見的任務,使用HttpClient類是一種常用的方式。下麵將介紹HttpClient的相關知識點。
1、HttpClient類
HttpClient是用於發送HTTP請求和接收HTTP響應的主要類。創建HttpClient實例是進行HTTP請求的第一步。
using System.Net.Http;
HttpClient client = new HttpClient();
2、基本的GET請求
使用HttpClient發送基本的GET請求,獲取遠程伺服器上的資源。
//未帶參數
string url = "https://api.example.com/data";
HttpResponseMessage response = await client.GetAsync(url);
// 在GET請求中傳遞查詢參數,以獲取符合特定條件的數據。
string url = "https://api.example.com/data";
string queryString = "?param1=value1¶m2=value2";
HttpResponseMessage response = await client.GetAsync(url + queryString);
3、POST請求
使用HttpClient發送POST請求,通常用於提交數據給伺服器。
string url = "https://api.example.com/data";
HttpContent content = new StringContent("{'key':'value'}");
HttpResponseMessage response = await client.PostAsync(url, content);
4、請求頭設置
在HTTP請求中設置自定義的請求頭,如授權信息、內容類型等。
//下麵案例是增加token驗證
client.DefaultRequestHeaders.Add("Authorization", "Bearer token");
5、處理響應
經過以上GET和Post請求,可以從HttpResponseMessage中獲取響應內容、狀態碼等信息。
string responseBody = await response.Content.ReadAsStringAsync();
HttpStatusCode statusCode = response.StatusCode;
6、異常處理
可以在請求中處理可能的異常,例如網路錯誤、超時等,通常使用HttpRequestException抓取。
try
{
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
}
catch (HttpRequestException ex)
{
// 處理異常
}
7、非同步請求
使用非同步方式發送HTTP請求,以避免阻塞主線程。
await Task.Run(async () =>
{
HttpResponseMessage response = await client.GetAsync(url);
// 處理響應
});
8、使用HttpClientFactory
使用HttpClientFactory進行HttpClient的管理,提高性能和資源利用率,官網推薦方法。
string? httpClientName = builder.Configuration["TodoHttpClientName"];
ArgumentException.ThrowIfNullOrEmpty(httpClientName);
//需要依賴註入後使用
builder.Services.AddHttpClient(
httpClientName,
client =>
{
client.BaseAddress = new Uri("https://api.example.com/data");
client.DefaultRequestHeaders.UserAgent.ParseAdd("dotnet-docs");
});
詳情可以查看之前文章:在.NET Core使用 HttpClient 的正確方式
9、取消HTTP請求
使用CancellationToken取消正在進行的HTTP請求。
var cts = new CancellationTokenSource();
HttpResponseMessage response = await client.GetAsync(url, cts.Token);
10、文件上傳
通過HTTP請求實現文件上傳,設置MultipartFormDataContent來傳遞文件數據。
using var form = new MultipartFormDataContent();
form.Add(new ByteArrayContent(fileBytes), "file", "filename.txt");
HttpResponseMessage response = await client.PostAsync(uploadUrl, form);
這些知識點涵蓋了C#中進行HTTP請求時的基本和進階技巧。熟練運用這些知識,可以輕鬆處理各種與網路通信相關的場景,從而構建出穩健、高效的.NET應用。
參考:learn.microsoft.com/zh-cn/dotnet/fundamentals/networking/http/httpclient
二、WebSocket通信知識點
WebSocket 是一種網路傳輸協議,可在單個 TCP 連接上進行全雙工通信,位於 OSI 模型的應用層。WebSocket通信在C#中是一種實現實時雙向通信的重要技術。以下是關於C# WebSocket通信的一些知識點:
1、ClientWebSocket類
ClientWebSocket是C#中用於實現WebSocket客戶端的主要類。通過該類可以建立WebSocket連接併進行通信。
using System.Net.WebSockets;
ClientWebSocket webSocket = new ClientWebSocket();
2、建立WebSocket連接
通過ConnectAsync方法建立與WebSocket伺服器的連接。
await webSocket.ConnectAsync(new Uri("wss://example.com"), CancellationToken.None);
3、發送WebSocket消息
使用SendAsync方法向WebSocket伺服器發送消息。
byte[] messageBytes = Encoding.UTF8.GetBytes("Hello, 歡迎關註DOTNET開發跳槽,獲取面試題!");
await webSocket.SendAsync(new ArraySegment<byte>(messageBytes), WebSocketMessageType.Text, true, CancellationToken.None);
4、接收WebSocket消息
使用ReceiveAsync方法從WebSocket伺服器接收消息。
byte[] buffer = new byte[1024];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);
5、關閉WebSocket連接
使用CloseAsync方法關閉WebSocket連接。
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
6、WebSocket異常處理
都逃不過異常處理,WebSocket處理可能發生的WebSocketException異常,以保證程式的健壯性。
try
{
// WebSocket 操作...
}
catch (WebSocketException ex)
{
Console.WriteLine($"WebSocket 異常: {ex.Message}");
}
7、WebSocket心跳
通過定期發送心跳消息,保持WebSocket連接的活躍狀態。
// 發送心跳消息
await webSocket.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes("ping")), WebSocketMessageType.Text, true, CancellationToken.None);
8、使用WebSocket的高級功能
深入瞭解WebSocket的高級功能,如分幀傳輸、消息類型等。下代碼處理二進位消息。
// 處理二進位消息
await webSocket.SendAsync(new ArraySegment<byte>(binaryData), WebSocketMessageType.Binary, true, CancellationToken.None);
9、WebSocket伺服器
C#也可以通過第三方庫實現WebSocket伺服器,如WebSocketListener。
using WebSocketSharp.Server;
var wssv = new WebSocketServer("ws://127.0.0.1:8080");
wssv.AddWebSocketService<MyWebSocketBehavior>("/myWebSocket");
wssv.Start();
10、安全性
使用wss協議(WebSocket over TLS/SSL)確保WebSocket通信的安全性。
await webSocket.ConnectAsync(new Uri("wss://example.com"), CancellationToken.None);
這些知識點涵蓋了在C#中進行WebSocket通信的基本和一些進階技巧。通過熟練掌握這些知識,開發者可以實現實時、雙向的通信,適用於諸如即時聊天、實時數據推送等場景。
參考:learn.microsoft.com/zh-cn/dotnet/fundamentals/networking/websockets
三、 Socket知識點
Socket又稱套接字,套接字是一種軟體介面,允許應用程式通過網路與另一個應用程式進行通信。套接字位於操作系統的網路堆棧中,為應用程式提供了與底層網路協議(例如 TCP/IP 和 UDP)交互的能力。Socket是C#中用於網路編程的核心類,它提供了對TCP、UDP等協議的支持。以下是關於C# Socket編程的一些知識點:
1、Socket基礎
Socket類是C#中進行網路編程的基礎類,用於實現不同協議的通信。
//新建
using System.Net.Sockets;
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2、TCP通信
TCP 通信是通過建立連接來完成的。連接建立後,發送方和接收方可以相互發送數據。TCP 協議通過三次握手來建立連接,通過四次揮手來斷開連接。Socket類可以用於實現TCP通信,建立可靠的、面向連接的通信。
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
serverSocket.Listen(10);
Socket clientSocket = serverSocket.Accept();
3、UDP通信
UDP 通信是通過直接發送數據包來完成的。發送方將數據包發送到網路,接收方從網路中接收數據包。UDP 協議不需要建立連接,因此具有更高的效率。通過Socket類實現UDP通信,適用於快速而簡單的通信場景。
Socket udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
udpSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
4、非同步Socket編程
利用SocketAsyncEventArgs實現非同步Socket操作,提高程式性能和併發處理能力。
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.Completed += OnSocketCompleted;
socket.ConnectAsync(args);
5、Socket異常處理
處理可能發生的SocketException異常,確保程式的穩定性。
try
{
// Socket 操作...
}
catch (SocketException ex)
{
Console.WriteLine($"Socket 異常: {ex.Message}");
}
6、Socket關閉
在Socket使用完畢後,及時關閉連接,釋放資源。
socket.Shutdown(SocketShutdown.Both);
socket.Close();
7、IP地址和埠處理
使用IPAddress和IPEndPoint操作IP地址和埠信息,方便網路連接的建立。
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint endPoint = new IPEndPoint(ipAddress, 8080);
8、網路流操作
NetworkStream用於在Socket上進行讀寫操作,通過Read和Write方法進行數據交互。
NetworkStream networkStream = new NetworkStream(socket);
byte[] buffer = new byte[1024];
int bytesRead = networkStream.Read(buffer, 0, buffer.Length);
9、Socket性能優化
使用緩衝區、連接池等技術優化Socket性能,提高數據傳輸效率。
byte[] buffer = new byte[1024];
socket.Receive(buffer);
10、廣播和多播
廣播和多播都是網路通信中常見的技術。它們的主要區別在於廣播是將數據包發送到網路中的所有主機,而多播是將數據包發送到網路中的一組主機。Socket支持實現廣播和多播機制,支持向多個目標發送消息。
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
這些知識點涵蓋了在C#中進行Socket編程的基本和一些進階技巧。通過熟練掌握這些知識,可以構建出高效、可靠的網路應用。
參考:learn.microsoft.com/zh-cn/dotnet/api/system.net.sockets.socket.-ctor?view=net-8.0
四、c#網路安全知識點
網路安全在網路編程開發中至關重要,在C#開發中也需要註意網路安全,特別是涉及到敏感信息傳輸或用戶身份驗證的應用。以下是一些與C#網路安全相關的知識點,以下某些知識點同樣適用於其它開發語言:
1、SSL/TLS加密
使用SSL/TLS協議對網路通信進行加密,確保數據在傳輸過程中不被竊取。在HttpClient中使用HttpClientHandler配置。
HttpClientHandler handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
HttpClient client = new HttpClient(handler);
2、HTTPS通信
可以通過使用HTTPS協議,保護數據的安全傳輸。使用`https://`的URL而非`http://`。
string url = "https://api.example.com";
HttpResponseMessage response = await client.GetAsync(url);
3、安全的密碼存儲
使用安全的方式存儲和處理用戶密碼,如使用哈希函數和鹽值來加密密碼。
string password = "user_password";
string hashedPassword = HashFunction.ComputeHash(password, salt);
4、防止SQL註入
使用參數化查詢或ORM工具等,防止SQL註入攻擊。
string query = "SELECT * FROM Users WHERE Username = @username";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@username", inputUsername);
5、防止跨站腳本攻擊(XSS)
對用戶輸入進行合適的編碼和驗證,防止惡意腳本註入。
string userContent = "<script>alert('XSS');</script>";
string encodedContent = HttpUtility.HtmlEncode(userContent);
6、 防止跨站請求偽造(CSRF)
ASP.NET MVC可以使用Anti-Forgery Token等機制來防止CSRF攻擊。
@Html.AntiForgeryToken()
7、身份驗證和授權
使用更高級的身份驗證機制,如JWT(JSON Web Token),併在應用中實施合適的授權策略。
[Authorize]
public ActionResult SecureAction()
{
// 安全操作
}
8、安全的文件上傳
對用戶上傳的文件進行驗證和安全處理,防止惡意文件上傳。
if (IsFileSafe(file))
{
// 處理上傳文件
}
9、安全的Cookie處理
對Cookie進行安全設置,如設置HttpOnly、Secure等屬性。
var cookie = new HttpCookie("myCookie", "value");
cookie.HttpOnly = true;
cookie.Secure = true;
Response.Cookies.Add(cookie);
五、結語
掌握這些C#網路編程知識點對於.NET開發者來說是至關重要的。這些知識點涵蓋了.NET開發中常用的C#網路編程技能,幫助開發者構建出更加健壯和高效的網路應用。在實際項目中,根據需求深入學習和實踐這些知識點,將有助於提升.NET開發者在網路編程領域的能力。網路編程還有很多知識點,比如傳輸格式、RESTful架構風格等,由於篇幅有限就不列出了。
希望本文提供的C#網路編程知識點對每個.NET開發者都有所幫助,對於C#網路編程知識點你還知道哪些?歡迎留言討論或者吐槽本文。
參考:AI查詢
推薦閱讀
2、每個.NET開發都應掌握的C#特性(Attribute)知識點
10、每個.NET開發都應掌握的C#處理文件系統I/O知識點
來源公眾號:DotNet開發跳槽