C# 网络编程技术
文章目录
- 1.网络编程的基础概念
- 2.TCP 通信
- 2.1 构建 TCP 服务器
- 2.2 构建 TCP 客户端
- 3.UDP 通信
- 3.1 构建 UDP 服务器
- 3.2 构建 UDP 客户端
- 4.HTTP 通信
- 4.1 使用 HttpClient 发起 HTTP 请求
- 4.2 使用 HttpListener 构建简单的 HTTP 服务器
- 5. 异步网络编程
- 6. 网络编程的常见案例
- 6.1 简单的聊天应用
- 6.2 文件传输
- 6.3 实时数据流
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 的速度较快,适合需要低延迟的场景。