2017-10-19 9 views
0

私はUWPに問題があります。小さなWebサーバーとして動作するようにStreamSocketListenerをバインドしようとしていますが、20個程度の接続後にReadAsync関数がハングし、アプリケーションは最終的にエラーなしで終了します。ここでUWP Socket.InputStream.ReadAsync Hangs

は、私が使用しているコードです:

private const uint bufferSize = 1024; 
private int port = 9000; 
public async void Start() 
    { 
     StreamSocketListener listener = new StreamSocketListener(); 


     listener.ConnectionReceived += async (sender, args) => 
     { 
      string request = null; 

      using (IInputStream input = args.Socket.InputStream) 
      { 
       byte[] data = new byte[bufferSize]; 
       IBuffer buffer = data.AsBuffer(); 
       uint bytesRead = bufferSize; 

       while (bytesRead == bufferSize) 
       { 
        IBuffer result = await input.ReadAsync(buffer, bufferSize, InputStreamOptions.Partial); 
        request += Encoding.ASCII.GetString(result.ToArray()); 
        bytesRead = buffer.Length; 
       } 

       processRequest(getPath(request), args.Socket.OutputStream); 
      } 
     }; 

     await listener.BindServiceNameAsync(port.ToString()); 
    } 

答えて

0

あなたは良い時間で廃車接続を処分したいです。あなたのアプリケーションが新しい接続を受け取ると、そのConnectionReceivedイベントハンドラで以前の接続を解放することができます。公式のコードサンプルも同じことを見ることができます。 SocketActivityStreamSocket/cs/Server