【问题标题】:Sending data from server to client in UWP在 UWP 中将数据从服务器发送到客户端
【发布时间】:2016-07-13 11:08:58
【问题描述】:

我正在尝试创建 UWP 客户端和服务器应用程序。客户端和服务器都托管在不同的机器上。

Network connection with UWP Apps

使用此链接,我能够连接到服务器,并且可以将字符串从客户端发送到服务器。这片绝对没问题。

但现在的问题是如何将数据从服务器发送到客户端。我找不到任何合适的样品。有人可以说明从服务器向客户端发送数据吗?

非常感谢任何一段代码或链接。

【问题讨论】:

  • 您的客户端是否始终连接到服务器?
  • 没有。单击我正在连接到服务器。我正在开发概念证明 (POC) 并需要扩展此 POC。我的要求是托管在不同机器上的客户端和服务器。当服务器从客户端接收到数据时,它需要立即将响应发送回客户端。
  • 就是简单,使用异步socket连接服务器,然后发送数据,不要断开,等待从同一个socket读取数据。示例msdn.microsoft.com/en-us/library/windows/apps/…

标签: c# sockets uwp windows-10-universal


【解决方案1】:

根据您提到的代码,修改 ConnectSocket() 方法以从服务器读取响应。

我还没有运行代码。可能需要修改

private async Task ConnectSocket()
    {
        StreamSocket socket = new StreamSocket();

        socket.Control.KeepAlive = false;

        HostName host = new HostName("localhost");

        try
        {
            await socket.ConnectAsync(host, "5463");

            Stream streamOut = socket.OutputStream.AsStreamForWrite();
            StreamWriter writer = new StreamWriter(streamOut);
            string request = "Test Self App \n";
            await writer.WriteLineAsync(request);
            await writer.FlushAsync();
            // Code for reading
            Stream streamIn = socket.OutputStream.AsStreamForRead();
            StreamReader reader = new StreamReader(streamIn);
            char[] result = new char[reader.BaseStream.Length];
            await reader.ReadAsync(result, 0, (int)reader.BaseStream.Length);
            // Your data will be in results
            socket.Dispose();
        }
        catch (Exception ex)
        {
            txb_Events.Text += ex.Message;
            //Logs.Add(ex.Message)
        }


    }

【讨论】:

    【解决方案2】:

    但现在的问题是如何将数据从服务器发送到客户端。

    由于您使用StreamSocket建立服务器和客户端之间的连接,因此官方有一个Socket activity trigger stream socket sample,其中包括客户端应用程序和服务器应用程序,并且完美地展示了如何使用Socket Activity Stream Socket API来保持套接字连接在应用程序生命周期后仍然存在。

    用于将数据从服务器发送到客户端部分,在StreamSocketListenerServer(服务器)项目中:

    private async void SendButton_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            DataWriter writer = new DataWriter(connectedSocket.OutputStream);
            writer.WriteBytes(Encoding.UTF8.GetBytes(SendMessageTextBox.Text));
            SendMessageTextBox.Text = "";
            await writer.StoreAsync();
            writer.DetachStream();
            writer.Dispose();
        }
        catch(Exception exception)
        {
            rootPage.NotifyUser(exception.Message, NotifyType.ErrorMessage);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2020-08-17
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多