在C#中,ByteBuffer
并不是一個內置類型
首先,確保已安裝 System.Memory
和 System.Buffers
NuGet包。
以下是一個使用 ArrayPool<byte>
和 Socket
類實現的簡單示例:
using System;
using System.Buffers;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
// 創建一個TCP套接字
using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 連接到遠程服務器
await socket.ConnectAsync(IPAddress.Loopback, 8080);
// 從ArrayPool獲取一個字節數組
byte[] buffer = ArrayPool<byte>.Shared.Rent(1024);
try
{
// 發送數據
string message = "Hello, Server!";
int bytesSent = Encoding.UTF8.GetBytes(message, 0, message.Length, buffer, 0);
await socket.SendAsync(buffer, bytesSent, SocketFlags.None);
// 接收數據
int bytesReceived = await socket.ReceiveAsync(buffer, 0, buffer.Length, SocketFlags.None);
string response = Encoding.UTF8.GetString(buffer, 0, bytesReceived);
Console.WriteLine($"Server response: {response}");
}
finally
{
// 將字節數組歸還給ArrayPool
ArrayPool<byte>.Shared.Return(buffer);
}
}
}
這個示例展示了如何使用 ArrayPool<byte>
和 Socket
類實現基本的網絡通信。請注意,這只是一個簡單的示例,實際應用可能需要更復雜的錯誤處理和資源管理。
對于更高級的網絡編程,可以考慮使用 System.IO.Pipelines
庫,它提供了一種高效、可擴展的方式來處理流式數據。