Starten Sie hören wieder mit dem Sockel nach einem disconnect

Ich Schreibe ein kleines C# - Sockets-Anwendung. Eigentlich habe ich zwei, einen server und einen client.

Den Benutzer läuft der client betritt die IP und den port für den server, drückt Sie auf 'verbinden', und dann einmal angeschlossen, können Sie geben Sie text in ein Textfeld und senden Sie es an den server.

Den server einfach erscheint entweder "Keine Verbindung" oder "Connection from [ip-Adresse]:[port]", und die zuletzt empfangene Nachricht unter.

Den server erfolgreich empfängt die Nachrichten, und sogar die Griffe der client trennen, in Ordnung.
Jetzt bin ich versucht zu machen, hören Sie wieder, nachdem der client hat die Verbindung getrennt, aber aus irgendeinem Grund nichts ich versuche es zulassen, starten Sie hören wieder.

Hier ist ein Teil von meinem 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);
    }

und

    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 { }
    }

Die Letzte Zeile: listen(); ist, was den Fehler auslöst.
Ich habe versucht ganz einfach den Aufruf von socket.BeginAccept() wieder, aber das ist auch eine Ausnahme auslöst.

Die Botschaft, die ich bekommen hab ist:

Nur eine Verwendung von jede Socketadresse (Protokoll-Netzwerk-Adresse/Anschluss) normalerweise darf

Wenn ich nicht rufe meine Funktion listen() und anstatt nur call-Buchse.BeginAccept(), dann bekomme ich "müssen Sie Sie zuerst in Buchse.listen()"

Wenn ich call den socket.listen () - Funktion, dann es sagt mir, es ist bereits angeschlossen und die Karre starten Sie hören.

Einmal habe ich eine asynchrone Verbindung, und erhielt mehrere asynchrone Nachrichten, wie dann ich beginnen Erhalt wieder?

  • Poste bitte mehr von deinem code. Es klingt wie Sie sind wegwerfen der socket ohne ordnungsgemäß entsorgt, und es wurde noch nicht Müll gesammelt, der port ist immer noch offen gehalten, indem es.
  • Wo ruft Ihr EndAccept an?
InformationsquelleAutor Oliver | 2010-11-30
Schreibe einen Kommentar