C# 网络编程技术
文章目录
1.网络编程的基础概念
网络编程涉及在计算机之间传输数据。主要有以下几种通信协议:
- TCP(Transmission Control Protocol):一种可靠的、基于连接的协议,提供流式的数据传输,适合文件传输、聊天应用等需要确保数据完整性的场景。
- UDP(User Datagram Protocol):一种不可靠的、无连接的协议,数据通过“数据报”的形式传输,适合视频流等不需要数据完全准确的应用。
- HTTP(Hypertext Transfer Protocol):基于请求-响应模式的协议,用于 Web 开发和网络服务。
C# 中的 System.Net 和 System.Net.Sockets 命名空间提供了对这些协议的支持,允许开发者构建不同类型的网络应用程序。
2.TCP 通信
TCP 是一种可靠的传输协议,通过建立连接来确保数据按顺序、无丢失地传输。C# 中的 TcpClient 和 TcpListener 类用于 TCP 通信。
2.1 构建 TCP 服务器
TCP 服务器用于接收客户端的连接请求。以下是一个基本的 TCP 服务器实现:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class TcpServer
{
public static void StartServer()
{
TcpListener listener = new TcpListener(IPAddress.Any, 8000);
listener.Start();
Console.WriteLine("Server started. Waiting for connection...");
while (true)
{
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Client connected.");
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received message: " + message);
byte[] response = Encoding.UTF8.GetBytes("Message received.");
stream.Write(response, 0, response.Length);
client.Close();
}
}
}
2.2 构建 TCP 客户端
TCP 客户端用于连接服务器并发送数据:
using System;
using System.Net.Sockets;
using System.Text;
class TcpClientExample
{
public static void StartClient()
{
TcpClient client = new TcpClient("127.0.0.1", 8000);
NetworkStream stream = client.GetStream();
string message = "Hello, server!";
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("Server response: " + response);
client.Close();
}
}
3.UDP 通信
UDP 是一种无连接协议,适合传输数据量小、对实时性要求高的场景。C# 中的 UdpClient 类可用于实现 UDP 通信。
3.1 构建 UDP 服务器
UDP 服务器接收客户端的数据报文:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class UdpServer
{
public static void StartServer()
{
UdpClient server = new UdpClient(8000);
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, 0);
Console.WriteLine("UDP Server started.");
while (true)
{
byte[] data = server.Receive(ref clientEndPoint);
string message = Encoding.UTF8.GetString(data);
Console.WriteLine("Received: " + message);
byte[] response = Encoding.UTF8.GetBytes("Message received.");
server.Send(response, response.Length, clientEndPoint);
}
}
}
3.2 构建 UDP 客户端
UDP 客户端可以发送数据到服务器:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class UdpClientExample
{
public static void StartClient()
{
UdpClient client = new UdpClient();
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
string message = "Hello, UDP server!";
byte[] data = Encoding.UTF8.GetBytes(message);
client.Send(data, data.Length, serverEndPoint);
byte[] response = client.Receive(ref serverEndPoint);
Console.WriteLine("Server response: " + Encoding.UTF8.GetString(response));
client.Close();
}
}
4.HTTP 通信
HTTP 是应用层协议,广泛用于 Web 开发。C# 提供了 HttpClient 类来发起 HTTP 请求,并且可以创建基于 HTTP 的 Web 服务器。
4.1 使用 HttpClient 发起 HTTP 请求
以下是一个使用 HttpClient 向 API 发起 GET 请求的示例:
using System;
using System.Net.Http;
using System.Threading.Tasks;
class HttpClientExample
{
public static async Task SendRequest()
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("https://jsonplaceholder.typicode.com/posts/1");
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
}
4.2 使用 HttpListener 构建简单的 HTTP 服务器
HttpListener 可用于创建一个简单的 HTTP 服务器:
using System;
using System.Net;
using System.Text;
class SimpleHttpServer
{
public static void StartServer()
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8080/");
listener.Start();
Console.WriteLine("HTTP Server started.");
while (true)
{
HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
string responseString = "<html><body><h1>Hello, HTTP World!</h1></body></html>";
byte[] buffer = Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
response.OutputStream.Write(buffer, 0, buffer.Length);
response.OutputStream.Close();
}
}
}
5. 异步网络编程
异步编程在网络编程中十分重要,能有效提升应用的性能。以下是一个异步 TCP 客户端的示例:
using System;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
class AsyncTcpClient
{
public static async Task StartClient()
{
TcpClient client = new TcpClient();
await client.ConnectAsync("127.0.0.1", 8000);
NetworkStream stream = client.GetStream();
string message = "Hello, async server!";
byte[] data = Encoding.UTF8.GetBytes(message);
await stream.WriteAsync(data, 0, data.Length);
byte[] buffer = new byte[1024];
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("Server response: " + response);
client.Close();
}
}
6. 网络编程的常见案例
6.1 简单的聊天应用
一个简单的聊天应用可以基于 TCP 实现。客户端向服务器发送消息,服务器将消息广播给所有连接的客户端。
6.2 文件传输
TCP 适合传输大文件,可以通过分块传输的方式发送文件数据。客户端发送文件块数据,服务器接收后写入文件。
6.3 实时数据流
视频流或实时传感器数据可使用 UDP 传输,因为 UDP 的速度较快,适合需要低延迟的场景。
原文地址:https://blog.csdn.net/weixin_51169222/article/details/143701951
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!