【问题标题】:UWP streamsocket ping networktimer issuesUWP streamsocket ping networktimer问题
【发布时间】:2016-07-21 17:51:17
【问题描述】:

我在 UWP 中有一个 StreamSocket,我使用 DataWriter 对象使用 StoreAsync() 方法发送这样的消息:

        public static async Task<bool> SendNetworkMessage(NetworkMember member, NetworkMessage message)
    {
        DataWriter writer = member.DataWriter;

        //Check that writer is not null
        if (writer != null)
        {
            try
            {
                //Serialize Message
                string stringToSend = SerializeObject<NetworkMessage>(message);

                //Send Message Length
                writer.WriteUInt32(writer.MeasureString(stringToSend));

                //Send Message
                writer.WriteString(stringToSend);

                await writer.StoreAsync();


                return true;
            }
            catch (Exception e)
            {

                Debug.WriteLine("DataWriter failed because of " + e.Message);

                Debug.WriteLine("");

                Disconnect(member);

                OnMemberDisconnectedEvent(member);
                return false;
            }
        }
        else { return false; }
    }

一切都很好,唯一的问题是我不知道连接是否断开。 现在我想使用这样的 DispatcherTimer 检查我的连接:

        private static async void NetworkTimer_Tick(object sender, object e)
    {
        foreach (NetworkMember member in networkMemberCollection)
        {
            if (member.Connected == true && member.Disconnecting == false)
            {
                await SendNetworkMessage(member, new PingMessage());

            }
        }}

但是,这会导致计时问题,从而导致 DataWriter 上出现 ObjectDisposedExceptions。当我从不同的线程发送消息时,DispatcherTimer 线程似乎无法使用 StreamSocket。我的问题是:如何确保每次都发送 Ping 但 SendNetworkMessage 操作是按顺序完成而不是重叠?

谢谢

【问题讨论】:

    标签: sockets asynchronous uwp dispatchertimer


    【解决方案1】:

    当我从其他线程发送消息时,DispatcherTimer 线程似乎无法使用 StreamSocket。

    如何确保每次都发送 Ping 但 SendNetworkMessage 操作是按顺序完成而不是重叠?

    有可能,而且我认为你的代码使用foreachawait操作可以保证按顺序发送消息的工作。

    唯一的问题是我不知道连接是否断开。

    如果您想知道连接是否断开,可以参考Handling WinRT StreamSocket disconnects (both server and client side)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 2023-03-17
      • 2018-10-21
      • 1970-01-01
      • 2022-10-15
      • 2016-03-18
      相关资源
      最近更新 更多