【发布时间】:2023-03-17 12:51:01
【问题描述】:
我正在用 C# 将 TCP 服务器编写为 UWP 应用程序,并希望轮询客户端列表以检查消息。客户端列表是一个 StreamSockets 列表。
在常规 C# 中,我可以检查 NetworkStream 以查看数据是否可用。在 UWP 中有没有办法解决这个问题?我目前正在使用:
mClient.InputStream.ReadAsync(streamBuffer, MessageHeader.HEADER_LENGTH, InputStreamOptions.None).AsTask().Wait(//Some amount of ms);
这很糟糕,因为对于许多客户端而言,延迟会变得太高。似乎还有一个竞争条件,除非达到总读取量,否则任务仍然无法完成。
我正在寻找与此语义相同的东西:
if (mNetworkStream.DataAvailable)
{
mClient.Client.Receive(mBuffer, 1, SocketFlags.Peek);
这可能吗?
【问题讨论】:
-
每个端口使用一个侦听器,可以在同一个侦听器上接受多个客户端。您可以使用异步侦听器并创建静态列表
。在建立新连接时在接受方法中将每个新套接字添加到列表对象。我喜欢使用包含套接字、接收缓冲区和接收消息的状态对象,这样您就可以枚举列表以查看数据何时可用。我在数据接收方法中创建了一个 FIFO 来应用层可以检查 FIFO 是否有来自客户端的新数据。查看我的项目:stackoverflow.com/questions/44471975/…
标签: c# networking uwp