2017-01-20 1 views
0

여기에서 Microsoft의이 샘플을 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

사용 Stream의 당신이 바이트 배열에 전달할 수 있습니다 Write 방법.

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

StreamWriter은 도우미입니다. StreamReader 또는 StreamWriter를 사용하여 스트림을 읽고 쓸 필요가 없습니다. 그들은 도움이되지만 실제로 원하는 것을하지 않습니다.

큰 금액을 한 번에 보내지 않으실 수도 있습니다. 이 경우 모든 것을 보내기를 마칠 때까지 반복 할 것입니다. 참조를 위해이 질문을 참조하십시오 : sending a large amount of data throught TCP socket

관련 문제