2017-10-19 16 views
0

J'ai des problèmes avec UWP. J'essaye de lier un StreamSocketListener pour agir en tant que petit serveur Web mais après une vingtaine de connexions la fonction ReadAsync se bloque et l'application finit par se fermer sans erreur.UWP Socket.InputStream.ReadAsync se bloque

Voici le code que je utilise:

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()); 
    } 

Répondre

0

Vous feriez mieux de disposer de la connexion désaffectée dans le temps. Lorsque votre application reçoit une nouvelle connexion, vous pouvez libérer la connexion précédente dans son gestionnaire d'événements ConnectionReceived. Vous pouvez voir l'exemple de code officiel fait également la même chose. SocketActivityStreamSocket/cs/Server