2017-10-19 30 views
0

我遇到了UWP问题。我试图绑定一个StreamSocketListener作为一个小型Web服务器,但是在20个左右的连接之后,ReadAsync函数挂起,应用程序最终关闭而没有错误。UWP Socket.InputStream.ReadAsync挂起

这里是我使用的代码:

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