【问题标题】:How to send file's byte[] using sockets in a UWP project?如何在 UWP 项目中使用套接字发送文件的字节 []?
【发布时间】:2017-01-20 20:12:01
【问题描述】:

我在这里使用了来自 Microsoft 的此示例 https://msdn.microsoft.com/en-us/windows/uwp/networking/sockets 将数据从一个发送到另一个,它工作正常。 但是如何使用套接字发送字节[] 或流(例如图像或视频)?

服务器:

private async void btnConnect_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                StreamSocketListener socketListener = new StreamSocketListener();

                socketListener.ConnectionReceived += SocketListener_ConnectionReceived;

                Windows.Networking.HostName host = new Windows.Networking.HostName("192.168.1.4");
                await socketListener.BindEndpointAsync(host, 8887.ToString());
            }
            catch (Exception ex)
            {
                //Handle exception.
            }

        }

private async void SocketListener_ConnectionReceived(StreamSocketListener sender,
     StreamSocketListenerConnectionReceivedEventArgs args)
        {

            Stream inStream = args.Socket.InputStream.AsStreamForRead();
            StreamReader reader = new StreamReader(inStream);
            string request = await reader.ReadLineAsync();

            Stream outStream = args.Socket.OutputStream.AsStreamForWrite();
            StreamWriter writer = new StreamWriter(outStream);
            await writer.WriteLineAsync(request);
            await writer.FlushAsync();
        }

客户:

private async void btnSend_Click(object sender, RoutedEventArgs e)
{
try
{

    Windows.Networking.Sockets.StreamSocket socket = new Windows.Networking.Sockets.StreamSocket();

    Windows.Networking.HostName serverHost = new Windows.Networking.HostName("192.168.1.4");

    string serverPort = "8887";
    await socket.ConnectAsync(serverHost, serverPort);

    Stream streamOut = socket.OutputStream.AsStreamForWrite();
    StreamWriter writer = new StreamWriter(streamOut);
    string request = "test";
    await writer.WriteLineAsync(request);
    await writer.FlushAsync();

    //Read data from the echo server.
    Stream streamIn = socket.InputStream.AsStreamForRead();
    StreamReader reader = new StreamReader(streamIn);
    string response = await reader.ReadLineAsync();
}
catch (Exception ex)
{
    //Handle exception here.            
}
}

【问题讨论】:

    标签: c# sockets networking uwp binaryreader


    【解决方案1】:

    使用StreamWrite 方法,该方法允许您传入一个字节数组。

    streamOut.Write(myByteArray, 0, myByteArray.Length);
    

    StreamWriter 更像是一个帮手。您不需要 StreamReader 或 StreamWriter 来读取/写入 Stream。它们很有帮助,但实际上并没有做你想做的事。

    现在请记住,您可能不想一次发送大量资金。在这种情况下,您将循环直到您完成所有发送。请参阅此问题以供参考:sending a large amount of data throught TCP socket

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2020-11-20
      • 2012-11-13
      相关资源
      最近更新 更多