Wie behandeln client disconnect Socket Programmierung?

Ich geschrieben habe, eine server-side-code über Sockets, Seine Arbeit gut, aber habe ein problem, ich weiß nicht, wie um dieses Szenario zu behandeln: wenn der Kunde nur schließt die Anwendung, ohne das senden von Disconnect-request, meine server-Seite das Programm stürzt ab. Was muss ich tun, um dies zu vermeiden? Bitte führe mich ich bin neu in Socket-Programmierung.

private void OnReceive(IAsyncResult result)
{
    try
    {
        Socket clientSocket = (Socket)result.AsyncState;
        clientSocket.EndReceive(result);

        command = responseMessage = string.Empty;
        command = ByteToString(receviedData);
        receviedData = new byte[30];

        if (command=="Connect")
        {
            ClientInfo clientInfo = new ClientInfo();
            clientInfo.socket = clientSocket;
            clientInfo.IP = clientSocket.RemoteEndPoint.ToString();
            connectedClients.Add(clientInfo);
            responseMessage = "Connection established...";
        }
        else if (command=="Disconnect")
        {
            for (int i = 0; i < connectedClients.Count; i++)
            {
                if (connectedClients[i].socket == clientSocket)
                {
                    connectedClients.RemoveAt(i);
                    break;
                }
            }
            clientSocket.Close();
        }
        else
        {
            responseMessage = "Error";
        }

        byte[] responseStatus = StringToByte(responseMessage);
        for (int i = 0; i < connectedClients.Count; i++)
        {
            if (connectedClients[i].socket==clientSocket)
            {
                connectedClients[i].socket.BeginSend(responseStatus, 0, responseStatus.Length,SocketFlags.None, new AsyncCallback(OnSend), connectedClients[i].socket);
                break;
            }
        }

    }
    catch(Exception ex)
    {
      throw new Exception(ex.Message);
    }
}
  • müssen Sie try/catch-die entsprechende exception: msdn.microsoft.com/en-US/library/0yd65esw(v=vs. 110).aspx, Wie Sie scheinen neu für stack-überlauf, bitte Lesen Sie den FAQ-Bereich. stackoverflow.com/faq
  • poste bitte den code, wo du die Ausnahme.
  • Ich bin mit diesem, aber der ganze serverseitige Anwendung zum Absturz zu bringen, weil dieser und nicht reagiert, um andere Kunden auch
  • ich habe den code @ErenErsönmez
  • Nun sind Sie gerade wieder werfen die Ausnahme. Müssen Sie ignorieren es einfach (aber vielleicht tun andere Dinge, wie das entfernen der client-Objekt aus connectedClients).
  • Ich begann eine Antwort und werden versuchen, Ihnen zu helfen. Können Sie bitte die Art/Erklärung connectedClients? Ist es List<ClientInfo>?
  • struct ClientInfo { public Socket socket;//Socket der client public string IP; }

InformationsquelleAutor user1941098 | 2013-01-12
Schreibe einen Kommentar