c#中socket服務(wù)端異步開發(fā) c# socket.accept
Catch捕獲優(yōu)惠賣家服務(wù)2025-08-2710131
在C#中,可以使用System.Net.Sockets
命名空間下的TcpClient
類來創(chuàng)建一個TCP服務(wù)器。以下是一個簡單的異步TCP服務(wù)器示例:
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
class AsyncTcpServer
{
private TcpListener listener;
private Task<TcpClient> clientTask;
public async Task StartAsync()
{
listener = new TcpListener(IPAddress.Any, 8080);
listener.Start();
Console.WriteLine("服務(wù)器已啟動,等待客戶端連接...");
clientTask = listener.AcceptTcpClientAsync();
}
public async Task HandleClientAsync(TcpClient client)
{
Console.WriteLine("客戶端已連接: " + client.RemoteEndPoint);
await Task.Run(async () =>
{
try
{
await client.GetStreamAsync();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = await client.ReceiveAsync(buffer)) > 0)
{
string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("接收到數(shù)據(jù): " + data);
}
}
catch (Exception ex)
{
Console.WriteLine("處理客戶端時出錯: " + ex.Message);
}
});
}
public void StopAsync()
{
if (clientTask != null)
{
clientTask.Wait();
}
listener.Stop();
}
}
class Program
{
static void Main(string[] args)
{
AsyncTcpServer server = new AsyncTcpServer();
server.StartAsync();
Console.WriteLine("服務(wù)器已啟動,等待客戶端連接...");
Console.ReadLine();
server.StopAsync();
}
}
這個示例創(chuàng)建了一個異步的TCP服務(wù)器,監(jiān)聽8080端口。當(dāng)有客戶端連接時,它會將客戶端連接到一個新的線程中,以便同時處理多個客戶端。當(dāng)客戶端斷開連接時,服務(wù)器會停止監(jiān)聽。
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。
評論列表

在上述代碼中,如果客戶端斷開連接后沒有及時釋放資源,可能會導(dǎo)致內(nèi)存泄漏,為了解決這個問題,可以在`HandleClientAsync`方法中使用`client.Close()`方法來關(guān)閉客戶端的流,以確保資源得到釋放,建議在`StopAsync`方法中添加一個檢查,確保所有已打開的流都已經(jīng)關(guān)閉。