C# IP im Chat Bannen.

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Gut, ich gebe zu ich bin wählerisch..

      Habe mich nun doch dazu entschlossen, die IP Bannfunktion so zu machen, dass bei jedem Login die IP mit dem Text aus einer Datei vergleicht.
      Ist die IP in der Datei, wird diese gelöscht.

      Versuche das so:

      private void CreateNewClientManagerAndIPBann(Socket socket)
      {
      ClientManager newClientManager = new ClientManager(socket);
      newClientManager.CommandReceived += new CommandReceivedEventHandler(CommandReceived);
      newClientManager.Disconnected += new DisconnectedEventHandler(ClientDisconnected);

      // IP Bann Funktion
      String line = "";

      StreamReader reader = new StreamReader(@"C:\Users\Dustin\Desktop\IPBann.txt");
      while ((line = reader.ReadToEnd()) != null) ;

      if (line.Contains(newClientManager.IP.Address.ToString()))
      {
      socket.Dispose();
      }
      else
      {
      this.CheckForAbnormalDC(newClientManager);
      this.clients.Add(newClientManager);
      this.UpdateConsole("Verbunden:", newClientManager.IP, newClientManager.Port);
      }
      }
      Was ist da falsch? Ich kann mich einloggen obwohl meine IP in der Datei steht..

      // ô.o sry habe i wie nicht auf Bearbeiten gedrückt <.<
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Darf ich wissen, was dieses Konstrukt soll?

      Quellcode

      1. while ((line = reader.ReadToEnd()) != null) ;

      Das kann iwie keinen Sinn ergeben :D
      Du sagst ihm, er soll ne schleife machen, solange der reader nicht null zurückgibt, wenn er die datei einliest.
      ReadToEnd liest die komplette Datei aufeinmal ein, beginnend an der Stelle, die der Dateizeiger vorgibt. (Bei ner neu geöffneten Datei halt 0, sonst da, wo der Zeiger eben steht)
      Was du brauchst, wäre ReadLine() und das kannste dann mit ner While-Schleife machen und so Zeile für Zeile einlesen.
      Bei ReadToEnd ist eine While-Schleife sinnlos, zumal sie garkeinen Schleifenkörper hat, nur den Kopf.
    • die ReadToEnd methode liest deine komplette Datei ein, beginnend von der Position des Dateizeigers der angibt, wo du dich in der Datei befindest (zB weil du zuerst ein paar andere Dinge ausglesen hast oder so)
      Daher ist diese MEthode eigentlich nicht so gut zum zeilenweise vergleichen, dazu musst du ReadLine() nutzen.
      Und das kannste dann per While-Schlefe nutzen zum Vergleich.
      Was du aber vorallem getan hast, ist eine sinnlose While-Schleife, die nichtmal einen Körper hat, sondern nur den Schleifenkopf.
      Eine While muss so aussehen:
      while ($Bedigung)
      {
      }
      Sie bekommt kein Semikolon, was du aber getan hast.
      Und bei Bedingung kommt das rein, was halt eben dafür sorgen soll, dass die Schleife läuft.

      Ersetz einfach das ReadToEnd durch ReadLine, bau das if IN die Schleife mit ein und es sollte gehen