优秀的编程知识分享平台

网站首页 > 技术文章 正文

5分钟掌握 c# 网络通讯架构及代码示例

nanyue 2025-07-28 19:23:46 技术文章 1 ℃

以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:

一、TCP协议(可靠连接)

1. 同步通信


// 服务器端

using System.Net.Sockets;

using TcpListener server = new TcpListener(IPAddress.Any, 8080);

server.Start();

TcpClient client = server.AcceptTcpClient();

NetworkStream stream = client.GetStream();

byte[] buffer = new byte;

int bytesRead = stream.Read(buffer, 0, buffer.Length);


// 客户端

using TcpClient client = new TcpClient("127.0.0.1", 8080);

NetworkStream stream = client.GetStream();

byte[] message = System.Text.Encoding.UTF8.GetBytes("Hello");

stream.Write(message, 0, message.Length);

2. 异步通信(高性能场景)


// 异步服务器

async Task HandleClientAsync(TcpClient client)

{

NetworkStream stream = client.GetStream();

byte[] buffer = new byte;

int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);

// 处理数据

}

二、UDP协议(无连接)

using System.Net;

using UdpClient client = new UdpClient(11000);

IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);

byte[] data = await client.ReceiveAsync();

string message = Encoding.UTF8.GetString(data);

三、HTTP通信

1. HttpClient基础用法

using HttpClient client = new HttpClient();

// GET请求

var response = await client.GetAsync("https://api.example.com/data");

string content = await response.Content.ReadAsStringAsync();


// POST请求

var postData = new StringContent("{\"key\":\"value\"}", Encoding.UTF8, "application/json");

var postResponse = await client.PostAsync("https://api.example.com/submit", postData);

四、WebSocket(双向通信)

// 客户端连接

using ClientWebSocket webSocket = new ClientWebSocket();

await webSocket.ConnectAsync(new Uri("wss://echo.websocket.org"), CancellationToken.None);

byte[] message = Encoding.UTF8.GetBytes("Hello WebSocket");

await webSocket.SendAsync(new ArraySegment<byte>(message), WebSocketMessageType.Text, true, CancellationToken.None);

五、SignalR(实时通信)

1. 服务端配置

// Startup.cs

app.UseEndpoints(endpoints =>

{

endpoints.MapHub<MyHub>("/myhub");

});

2. 客户端调用

IHubContext<MyHub> hubContext = ...;

await hubContext.Clients.All.SendAsync("ReceiveMessage", "Hello");

关键注意事项

1. 异常处理:所有网络操作需包裹在try-catch块中

2. 资源释放:使用using语句或显式调用Dispose()释放连接

3. 线程安全:异步操作需注意线程上下文切换

4. 协议选择:

- TCP:高可靠性场景(文件传输)

- UDP:低延迟场景(游戏、直播)

- WebSocket/SignalR:实时双向通信(聊天、仪表盘)

Tags:

最近发表
标签列表