示例#1
0
        /// <summary>
        /// Methode callback statique se déclenchant quand un client commence à recevoir des données.
        /// Le client est passé dans le paramètre "Result".
        /// </summary>
        /// <param name="result">Objet de méthode asynchrone contenant le client ayant reçu des données</param>
        static void OnBeginReceive(IAsyncResult result)
        {
            TCPServerClient client = (TCPServerClient)result.AsyncState;

            try
            {
                if (client != null)
                {
                    // Obtiention du flux réseau du client
                    NetworkStream stream = client.Stream;

                    if (stream != null)
                    {
                        int nLen = stream.EndRead(result);      // finalise la lecture asynchrone.
                        if (nLen <= 0)
                        {
                            // Si longueur inférieur ou égale à 0 : erreur dans le flux => on déconnecte.
                            client.Disconnect();
                            if (client.ServerParent != null)
                            {
                                client.ServerParent.OnDisconnect(client);
                            }
                        }
                        else
                        {
                            // Création du buffer de données à l abonne longueur:
                            byte[] tmpBuffer = new byte[nLen];

                            // Copie de la bonne quantité de données du buffer du client vers tmpBuffer:
                            Buffer.BlockCopy(client.ReadBuffer, 0, tmpBuffer, 0, nLen);

                            // On relance la lecture pour obtenir les prochaines données:
                            stream.BeginRead(client.ReadBuffer, 0, client.ReadBuffer.Length, new AsyncCallback(OnBeginReceive), client);

                            if (client.ServerParent != null && client.ServerParent.ReferenceDelegate != null)
                            {
                                // Génération de l'évéenement de lecture sur le delegate:
                                client.ServerParent.ReferenceDelegate.onTcpReading(tmpBuffer, client);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (client != null)
                {
                    client._currentException = ex;
                }
            }
        }
示例#2
0
        /// <summary>
        /// Stoppe l'écoute et déconnecte tous les clients.
        /// </summary>
        public void Stop()
        {
            // Déconnecte chaque client:
            for (int i = this.Clients.Count - 1; i >= 0; i--)
            {
                TCPServerClient c = this.Clients[i];
                c.Disconnect();
            }

            // Supprime l'objet TcpListener:
            if (_tcpListener != null)
            {
                _tcpListener.Stop();
                _tcpListener = null;
            }
        }