翼度科技»论坛 编程开发 .net 查看内容

每个.NET开发都应掌握的C#网络编程知识点

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
上篇文章讲述了C#处理文件系统I/O知识点,本文将介绍C#网络编程知识点。随着信息技术的不断发展,网络编程在.NET开发中变得愈发重要。无论是构建Web应用、实现实时通信,还是处理分布式系统,C#网络编程都是必备的技能。以下是.NET开发者在网络编程中应该掌握的关键知识点。
一、http请求知识点
在C#中进行HTTP请求是.NET开发中常见的任务,使用HttpClient类是一种常用的方式。下面将介绍HttpClient的相关知识点。
1、HttpClient类
HttpClient是用于发送HTTP请求和接收HTTP响应的主要类。创建HttpClient实例是进行HTTP请求的第一步。
  1. using System.Net.Http;
  2. HttpClient client = new HttpClient(); 
复制代码
2、基本的GET请求
使用HttpClient发送基本的GET请求,获取远程服务器上的资源。
  1.   //未带参数
  2.   string url = "https://api.example.com/data";
  3.    HttpResponseMessage response = await client.GetAsync(url);
  4.    // 在GET请求中传递查询参数,以获取符合特定条件的数据。
  5.      string url = "https://api.example.com/data";
  6.    string queryString = "?param1=value1&param2=value2";
  7.    HttpResponseMessage response = await client.GetAsync(url + queryString);
复制代码
3、POST请求
使用HttpClient发送POST请求,通常用于提交数据给服务器。
  1.    string url = "https://api.example.com/data";
  2.    HttpContent content = new StringContent("{'key':'value'}");
  3.    HttpResponseMessage response = await client.PostAsync(url, content);
复制代码
4、请求头设置
在HTTP请求中设置自定义的请求头,如授权信息、内容类型等。
  1.  //下面案例是增加token验证
  2.   client.DefaultRequestHeaders.Add("Authorization", "Bearer token");
复制代码
5、处理响应
经过以上GET和Post请求,可以从HttpResponseMessage中获取响应内容、状态码等信息。
  1.    string responseBody = await response.Content.ReadAsStringAsync();
  2.    HttpStatusCode statusCode = response.StatusCode;
复制代码
6、异常处理
可以在请求中处理可能的异常,例如网络错误、超时等,通常使用HttpRequestException抓取。
  1.    try
  2.    {
  3.        HttpResponseMessage response = await client.GetAsync(url);
  4.        response.EnsureSuccessStatusCode();
  5.    }
  6.    catch (HttpRequestException ex)
  7.    {
  8.           // 处理异常
  9.    }
复制代码
7、异步请求
使用异步方式发送HTTP请求,以避免阻塞主线程。
  1.    await Task.Run(async () =>
  2.    {
  3.        HttpResponseMessage response = await client.GetAsync(url);
  4.        // 处理响应
  5.    });
复制代码
8、使用HttpClientFactory
使用HttpClientFactory进行HttpClient的管理,提高性能和资源利用率,官网推荐方法。
  1. string? httpClientName = builder.Configuration["TodoHttpClientName"];
  2. ArgumentException.ThrowIfNullOrEmpty(httpClientName);
  3.   //需要依赖注入后使用
  4. builder.Services.AddHttpClient(
  5.     httpClientName,
  6.     client =>
  7.     {
  8.         client.BaseAddress = new Uri("https://api.example.com/data");
  9.         client.DefaultRequestHeaders.UserAgent.ParseAdd("dotnet-docs");
  10.     });
复制代码
详情可以查看之前文章:在.NET Core使用 HttpClient 的正确方式
9、取消HTTP请求
使用CancellationToken取消正在进行的HTTP请求。
  1.     var cts = new CancellationTokenSource();
  2.     HttpResponseMessage response = await client.GetAsync(url, cts.Token);
复制代码
10、文件上传
通过HTTP请求实现文件上传,设置MultipartFormDataContent来传递文件数据。
  1.     using var form = new MultipartFormDataContent();
  2.     form.Add(new ByteArrayContent(fileBytes), "file", "filename.txt");
  3.     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连接并进行通信。
  1.    using System.Net.WebSockets;
  2.    ClientWebSocket webSocket = new ClientWebSocket();
复制代码
2、建立WebSocket连接
通过ConnectAsync方法建立与WebSocket服务器的连接。
  1.   await webSocket.ConnectAsync(new Uri("wss://example.com"), CancellationToken.None);
复制代码
3、发送WebSocket消息
使用SendAsync方法向WebSocket服务器发送消息。
  1.    byte[] messageBytes = Encoding.UTF8.GetBytes("Hello, 欢迎关注DOTNET开发跳槽,获取面试题!");
  2.    await webSocket.SendAsync(new ArraySegment<byte>(messageBytes), WebSocketMessageType.Text, true, CancellationToken.None);
复制代码
4、接收WebSocket消息
使用ReceiveAsync方法从WebSocket服务器接收消息。
  1.    byte[] buffer = new byte[1024];
  2.    WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
  3.    string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);
复制代码
5、关闭WebSocket连接
使用CloseAsync方法关闭WebSocket连接。
  1.   await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
复制代码
6、WebSocket异常处理
都逃不过异常处理,WebSocket处理可能发生的WebSocketException异常,以保证程序的健壮性。
  1.    try
  2.    {
  3.        // WebSocket 操作...
  4.    }
  5.    catch (WebSocketException ex)
  6.    {
  7.        Console.WriteLine($"WebSocket 异常: {ex.Message}");
  8.    }
复制代码
7、WebSocket心跳
通过定期发送心跳消息,保持WebSocket连接的活跃状态。
  1.    // 发送心跳消息
  2.    await webSocket.SendAsync(new ArraySegment<byte>(Encoding.UTF8.GetBytes("ping")), WebSocketMessageType.Text, true, CancellationToken.None);
复制代码
8、使用WebSocket的高级功能
深入了解WebSocket的高级功能,如分帧传输、消息类型等。下代码处理二进制消息。
  1.    // 处理二进制消息
  2.    await webSocket.SendAsync(new ArraySegment<byte>(binaryData), WebSocketMessageType.Binary, true, CancellationToken.None);
复制代码
9、WebSocket服务器
C#也可以通过第三方库实现WebSocket服务器,如WebSocketListener。
  1.     using WebSocketSharp.Server;
  2.     var wssv = new WebSocketServer("ws://127.0.0.1:8080");
  3.     wssv.AddWebSocketService<MyWebSocketBehavior>("/myWebSocket");
  4.     wssv.Start();
复制代码
10、安全性
使用wss协议(WebSocket over TLS/SSL)确保WebSocket通信的安全性。
  1.  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#中进行网络编程的基础类,用于实现不同协议的通信。
  1.   //新建
  2.    using System.Net.Sockets;
  3.    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
复制代码
2、TCP通信
TCP 通信是通过建立连接来完成的。连接建立后,发送方和接收方可以相互发送数据。TCP 协议通过三次握手来建立连接,通过四次挥手来断开连接。Socket类可以用于实现TCP通信,建立可靠的、面向连接的通信。
  1.    Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2.    serverSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
  3.    serverSocket.Listen(10);
  4.    Socket clientSocket = serverSocket.Accept();
复制代码
3、UDP通信
UDP 通信是通过直接发送数据包来完成的。发送方将数据包发送到网络,接收方从网络中接收数据包。UDP 协议不需要建立连接,因此具有更高的效率。通过Socket类实现UDP通信,适用于快速而简单的通信场景。
  1.    Socket udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  2.    udpSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
复制代码
4、异步Socket编程
利用SocketAsyncEventArgs实现异步Socket操作,提高程序性能和并发处理能力。
  1.    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2.    SocketAsyncEventArgs args = new SocketAsyncEventArgs();
  3.    args.Completed += OnSocketCompleted;
  4.    socket.ConnectAsync(args);
复制代码
5、Socket异常处理
处理可能发生的SocketException异常,确保程序的稳定性。
  1.    try
  2.    {
  3.        // Socket 操作...
  4.    }
  5.    catch (SocketException ex)
  6.    {
  7.        Console.WriteLine($"Socket 异常: {ex.Message}");
  8.    }
复制代码
6、Socket关闭
在Socket使用完毕后,及时关闭连接,释放资源。
  1.    socket.Shutdown(SocketShutdown.Both);
  2.    socket.Close();
复制代码
7、IP地址和端口处理
使用IPAddress和IPEndPoint操作IP地址和端口信息,方便网络连接的建立。
  1.    IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
  2.    IPEndPoint endPoint = new IPEndPoint(ipAddress, 8080);
复制代码
8、网络流操作
NetworkStream用于在Socket上进行读写操作,通过Read和Write方法进行数据交互。
  1.    NetworkStream networkStream = new NetworkStream(socket);
  2.    byte[] buffer = new byte[1024];
  3.    int bytesRead = networkStream.Read(buffer, 0, buffer.Length);
复制代码
9、Socket性能优化
使用缓冲区、连接池等技术优化Socket性能,提高数据传输效率。
  1.    byte[] buffer = new byte[1024];
  2.    socket.Receive(buffer);
复制代码
10、广播和多播
广播和多播都是网络通信中常见的技术。它们的主要区别在于广播是将数据包发送到网络中的所有主机,而多播是将数据包发送到网络中的一组主机。Socket支持实现广播和多播机制,支持向多个目标发送消息。
  1.    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配置。
  1.    HttpClientHandler handler = new HttpClientHandler();
  2.    handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
  3.    HttpClient client = new HttpClient(handler);
复制代码
2、HTTPS通信
可以通过使用HTTPS协议,保护数据的安全传输。使用`https://`的URL而非`http://`。
  1.    string url = "https://api.example.com";
  2.    HttpResponseMessage response = await client.GetAsync(url);
复制代码
3、安全的密码存储
使用安全的方式存储和处理用户密码,如使用哈希函数和盐值来加密密码。
  1.    string password = "user_password";
  2.    string hashedPassword = HashFunction.ComputeHash(password, salt);
复制代码
4、防止SQL注入
使用参数化查询或ORM工具等,防止SQL注入攻击。
  1.    string query = "SELECT * FROM Users WHERE Username = @username";
  2.    SqlCommand command = new SqlCommand(query, connection);
  3.    command.Parameters.AddWithValue("@username", inputUsername);
复制代码
5、防止跨站脚本攻击(XSS)
对用户输入进行合适的编码和验证,防止恶意脚本注入。
  1.    string userContent = "";
  2.    string encodedContent = HttpUtility.HtmlEncode(userContent);
复制代码
6、 防止跨站请求伪造(CSRF)
ASP.NET MVC可以使用Anti-Forgery Token等机制来防止CSRF攻击。
  1.    @Html.AntiForgeryToken()
复制代码
7、身份验证和授权
使用更高级的身份验证机制,如JWT(JSON Web Token),并在应用中实施合适的授权策略。
  1.    [Authorize]
  2.    public ActionResult SecureAction()
  3.    {
  4.        // 安全操作
  5.    }
复制代码
8、安全的文件上传
对用户上传的文件进行验证和安全处理,防止恶意文件上传。
  1.    if (IsFileSafe(file))
  2.    {
  3.        // 处理上传文件
  4.    }
复制代码
9、安全的Cookie处理
对Cookie进行安全设置,如设置HttpOnly、Secure等属性。
  1.    var cookie = new HttpCookie("myCookie", "value");
  2.    cookie.HttpOnly = true;
  3.    cookie.Secure = true;
  4.    Response.Cookies.Add(cookie);
复制代码
五、结语
掌握这些C#网络编程知识点对于.NET开发者来说是至关重要的。这些知识点涵盖了.NET开发中常用的C#网络编程技能,帮助开发者构建出更加健壮和高效的网络应用。在实际项目中,根据需求深入学习和实践这些知识点,将有助于提升.NET开发者在网络编程领域的能力。网络编程还有很多知识点,比如传输格式、RESTful架构风格等,由于篇幅有限就不列出了。
希望本文提供的C#网络编程知识点对每个.NET开发者都有所帮助,对于C#网络编程知识点你还知道哪些?欢迎留言讨论或者吐槽本文。
参考:AI查询
推荐阅读
1、每个.NET开发都应掌握的C#多线程知识点
2、每个.NET开发都应掌握的C#特性(Attribute)知识点
3、每个.NET开发都应掌握的C#反射知识点
4、每个.NET开发都应掌握的C#异常处理知识点
5、每个.NET开发都应掌握的C#集合知识点
6、每个.NET开发都应掌握的C#委托事件知识点
7、每个.NET开发都应掌握的C#接口知识点
8、每个.NET开发都应掌握的linq知识点
9、每个.NET开发都应掌握C#泛型的几个知识点
10、每个.NET开发都应掌握的C#处理文件系统I/O知识点
11、每个.NET开发都应该知道的10个.NET库
  1. 来源公众号:DotNet开发跳槽    
复制代码
来源:https://www.cnblogs.com/xbhp/archive/2023/12/18/17910869.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具