2017-01-20 32 views
0

我在这里用微软的这个示例https://msdn.microsoft.com/en-us/windows/uwp/networking/sockets从一个发送数据到另一个,它工作。 但是,如何使用套接字发送字节[]或流(比如图像或视频)?如何使用UWP项目中的套接字发送文件的字节[]?

服务器:

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.    
} 
} 

回答

3

使用StreamWrite方法,使您可以在一个字节数组传递。

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

StreamWriter更多的是帮手。您不需要StreamReader或StreamWriter来读取/写入流。他们是有帮助的,但实际上不会做你想做的事情。

现在请记住,您可能不希望立即发送大量金额。在这种情况下,你会循环直到你完成发送。看到这个问题以供参考:sending a large amount of data throught TCP socket