gpt4 book ai didi

从异步方法获取更新时的 C# 封装

转载 作者:行者123 更新时间:2023-11-30 16:42:23 30 4
gpt4 key购买 nike

我有一个 tcp 连接,我想在服务器类的 HandleConnectionAsync 方法中保持打开状态。它将从客户端接收持续更新。

private async void HandleConnectionAsync(TcpClient tcpClient)
{
Console.WriteLine("Got connection request from {0}", tcpClient.Client.RemoteEndPoint.ToString());
try
{
using (var networkStream = tcpClient.GetStream())
using (var reader = new StreamReader(networkStream))
using (var writer = new StreamWriter(networkStream))
{
writer.AutoFlush = true;
while (true)
{
string dataFromClient = await reader.ReadLineAsync();
Console.WriteLine(dataFromClient);

await writer.WriteLineAsync("FromServer-" + dataFromClient);
}
}
}
catch (Exception exp)
{
Console.WriteLine(exp.Message);
}
}

我希望能够接收读者放入 dataFromClient 的更新,而不必将我的代码放在我的服务器实现类中。所以:

static void Main(string[] args)
{
Server s = new Server();
s.start();
//get dataFromClient as it comes in here
}

问题是我不确定该怎么做。某种回调或事件?

最佳答案

方法有很多种。

最少的代码是将 Action 传递给您的服务器,例如:

Server s = new Server();
s.start(dataFromClient =>
{
// do something with data from client
});

并在 HandleConnectionAsync 中调用操作,例如:

private async void HandleConnectionAsync(TcpClient tcpClient, Action<string> callback)
{
..
// Console.WriteLine(dataFromClient);
callback(dataFromClient);
..

然而,这并没有解决一些问题,例如同时有许多客户端,需要知道哪个是哪个客户端。

关于从异步方法获取更新时的 C# 封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46846649/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com