|
上篇文章讲述了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 = "";
- string encodedContent = HttpUtility.HtmlEncode(userContent);
复制代码 6、 防止跨站请求伪造(CSRF)
ASP.NET MVC可以使用Anti-Forgery Token等机制来防止CSRF攻击。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查询
推荐阅读
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库来源:https://www.cnblogs.com/xbhp/archive/2023/12/18/17910869.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|