在UWP中从服务器向客户端发送数据

时间:2016-07-12 08:45:18

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

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

Network connection with UWP Apps

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

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

任何一段代码或链接都非常受欢迎。

2 个答案:

答案 0 :(得分:0)

从您提到的代码中,修改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)
        }


    }

答案 1 :(得分:0)

  

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

由于您使用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);
    }
}