标题: 分享 .NET 中常用的网络编程类型及案例 [打印本页] 作者: lsekfe 时间: 2023-5-22 13:33 标题: 分享 .NET 中常用的网络编程类型及案例 介绍几种 .NET 中常用的网络编程类型及其示例: 1、Socket 编程
Socket 是最基础、最原始的网络编程方式之一,它提供了一组 API 来实现数据传输和通信。使用 Socket 编程时需要手动处理与底层协议和繁琐的细节,但同时也具有灵活性和可定制性。
以下是基于 TCP 协议实现的 Echo Server 示例:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class EchoServer
{
public static void Main()
{
try
{
// 创建一个 TCP/IP socket 监听指定端口
var port = 12345;
var listener = new TcpListener(IPAddress.Any, port);
listener.Start();
Console.WriteLine($"Echo server is listening on port {port}...");
while (true)
{
// 等待客户端连接
using (var client = listener.AcceptTcpClient())
{
Console.WriteLine($"Client connected from {client.Client.RemoteEndPoint}");
// 获取 client 的 NetworkStream 并读取客户端发送来的数据
using (var stream = client.GetStream())
{
var buffer = new byte[1024];
var bytesRead = stream.Read(buffer, 0, buffer.Length);
// 将客户端发送的数据回传
var input = Encoding.UTF8.GetString(buffer, 0, bytesRead);
var output = $"Echo: {input}";
var data = Encoding.UTF8.GetBytes(output);
stream.Write(data, 0, data.Length);
Console.WriteLine($"Received {input}, echoed back to client.");
}
}
}
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
}
}
2、WebRequest/WebResponse
WebRequest 和 WebResponse 是 .NET 中用于 Web 通信的最基础和原始的 API。它们提供了一个抽象类,用于发送和接收 HTTP 和 HTTPS 等 Web 请求和响应。
以下是使用 WebRequest/WebResponse 发送 GET 请求并读取响应的示例:
using System;
using System.IO;
using System.Net;
public class HttpExample
{
public static void Main()
{
try
{
// 创建 GET 请求,并设置请求头
var url = "https://www.example.com";
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = "Mozilla/5.0";
// 发送请求并获取响应
using (var response = (HttpWebResponse)request.GetResponse())
{
Console.WriteLine($"Status code: {(int)response.StatusCode} {response.StatusDescription}");
Console.WriteLine($"Content type: {response.ContentType}");
Console.WriteLine($"Content length: {response.ContentLength}");
// 读取响应内容
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
var responseBody = reader.ReadToEnd();
Console.WriteLine(responseBody);
}
}
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
}
}
3、HttpClient
HttpClient 是 .NET 中更方便和高级的网络编程 API 之一,它支持各种 HTTP 和 HTTPS 请求、响应和通信。使用 HttpClient 可以轻松地实现网络连接池、缓存等特性。
以下是使用 HttpClient 发送 GET 请求并读取响应的示例:
using System;
using System.Net.Http;
using System.Threading.Tasks;
public class HttpExample
{
public static async Task Main()
{
try
{
// 创建 HttpClient 实例
using (var client = new HttpClient())
{
// 发送 GET 请求并获取响应
var url = "https://www.example.com";
var response = await client.GetAsync(url);
Console.WriteLine($"Status code: {(int)response.StatusCode} {response.ReasonPhrase}");
Console.WriteLine($"Content type: {response.Content.Headers.ContentType.MediaType}");
Console.WriteLine($"Content length: {response.Content.Headers.ContentLength}");
// 读取响应内容
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
catch (Exception e)
{
Console.WriteLine($"Error: {e.Message}");
}
}
}