Salut à tous ! 
Je suis ici ce soir car j'ai un petit problème... ( eh oui, encore un! )
Malgré mes recherches, je ne trouve pas grand-chose
( ou bien mon cerveau qui n'est pas assez gros ?
)
J'aime bien le dev, et j’apprends de moi-même,
alors plus vous pourrez m'apprend, et plus je serais : 
Enfin bref, je suis actuellement entrai de développer une application qui
communique en TCP avec d'autres ( architecture client-serveur )
Dans ce cas, de multiples clients peuvent se connecter au "serveur"
Seulement je rencontre quelques problèmes lors de la fermeture du Socket
Voici mon code ( le plus simple possible )
Classe TcpClient : prévue pour traiter chaque client séparément
Classe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| private int maxConnections = 1;
// socket principal
public Socket socketHandler;
// liste des clients connectés
public HashSet<TcpClient> clients = new HashSet<TcpClient>();;
public Boolean startListening(int _port, int _maxConnections)
{
try
{
this.maxConnections = _maxConnections;
//bind et listen
socketHandler = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socketHandler.Bind(new IPEndPoint(IPAddress.Any, _port));
socketHandler.Listen(this.maxConnections);
socketHandler.BeginAccept(new AsyncCallback(newConnection), socketHandler);
}
catch()
{
}
}
private void newConnection(IAsyncResult iAr)
{
try
{
Socket socket = ((Socket)iAr.AsyncState).EndAccept(iAr);
// "Nouvelle connection !"
// ajout
clients.Add(new TcpClient(socket, clientCount));
}
catch()
{
}
socketHandler.BeginAccept(new AsyncCallback(newConnection), socketHandler);
}
} |
Maintenant la fonction qui ferme ce socket :
1 2 3 4 5 6 7 8 9 10
| public void destroy()
{
foreach (TcpClient client in clients)
{
// appel de fonction de fermeture de tous les clients listés
client.Disconnect();
}
clients = null;
} |
Jusque là tout va bien 
D'après la doc, pour fermer le socket :
socketHandler.Shutdown (SocketShutdown.Both);
Erreur : je reçoit aussi une connexion de la part de "newConnection"
Avec l'erreur : Une requête d'envoi ou de réception de données n'a pas été autorisée car le socket n'est pas connecté
puis :
Erreur : je reçoit une connexion de la part de la fonction "newConnection"
Avec l'erreur : "Impossible d'accèder à un objet supprimé", ce que es logique puisque qu'il est fermé ...
Là je suis un peu à sec ... si quelqu'un voit comment faire, il est le bienvenu !
Je pense avoir tout expliqué, plus ou moins clairement
Je vous remercie d'avance pour votre aide 
.
Partager