J'écris une petite application C# Sockets. En fait j'en ai deux, un serveur et un client.Commencer à écouter à nouveau avec Socket après une déconnexion
L'utilisateur exécute le client, saisit l'adresse IP et le port du serveur, appuie sur 'connexion', puis une fois connecté, il peut entrer du texte dans une zone de texte et l'envoyer au serveur.
Le serveur affiche simplement "Pas de connexion" ou "Connexion depuis [ip]: [port]" et le message reçu le plus récent en dessous.
Le serveur reçoit avec succès les messages et gère même la déconnexion du client. Maintenant j'essaie de le faire réécouter après que le client se soit déconnecté mais pour une raison quelconque, rien que j'essaie lui permettra de recommencer à écouter.
Voici une partie de mon code:
Socket socket;
private void listen()
{
socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Any, 12345));
socket.Listen(10);
socket.BeginAccept(new AsyncCallback(acceptAsync), socket);
}
et
private void receiveAsync(IAsyncResult res)
{
Socket socket = (Socket)res.AsyncState;
try
{
int nBytes = socket.EndReceive(res);
if (nBytes > 0)
{
Invoke(new MethodInvoker(delegate()
{
lMessage.Text = encoder.GetString(buffer);
}));
setupReceiveAsync(socket);
}
else
{
Invoke(new MethodInvoker(delegate()
{
lConnections.Text = "No Connections.";
lMessage.Text = "No Messages.";
socket.Shutdown(SocketShutdown.Both);
socket.Close();
listen();
}));
}
}
catch { }
}
La dernière ligne: écouter(); est ce qui jette l'erreur. J'ai essayé à nouveau d'appeler socket.BeginAccept(), mais cela déclenche également une exception.
Le message que je reçois est:
Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est normalement autorisé
Si je n'appelle mon écouter() fonction et à la place juste appeler socket.BeginAccept(), puis je reçois "Vous devez d'abord appeler socket.listen()"
Si j'appelle la fonction socket.listen(), alors il me dit qu'il est déjà connecté et Le chariot commence à écouter.
Une fois que j'ai établi une connexion asynchrone et reçu plusieurs messages asynchrones, comment puis-je recommencer à recevoir?
Veuillez poster plus de votre code. On dirait que vous jetez la prise d'écoute sans la jeter correctement, et qu'elle n'a pas encore été ramassée, donc le port est toujours ouvert par elle. – cdhowie
Où appelez-vous 'EndAccept' à? – Donnie