【问题标题】:Polling a StreamSocket connection UWP Server轮询 StreamSocket 连接 UWP 服务器
【发布时间】: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


【解决方案1】:

好的,这里有更多的上下文。我正在使用 Unity,但没有意识到自从引入 IL2CPP 脚本后端之后,System.Net.Sockets 可以在 UWP 中使用。这意味着我不必使用任何限制性的 UWP 套接字包装器。

感谢@jdweng,我开始实现多监听器变体,直到我发现我可以使用我现有的.Net 实现!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多