nächste anfrage bei einem tcpserver



  • HI Leute
    ich steh gerade ein bissl auf dem Schlauch.

    Ich benutze folgenden Programm code um einen Tcpserver zu erstellen und eine anfrage des clients abzuwarten:

    private void HandleClientComm(object client)
    {
      TcpClient tcpClient = (TcpClient)client;
      NetworkStream clientStream = tcpClient.GetStream();
    
      byte[] message = new byte[4096];
      int bytesRead;
    
      while (true)
      {
        bytesRead = 0;
    
        try
        {
          //blocks until a client sends a message
          bytesRead = clientStream.Read(message, 0, 4096);
        }
        catch
        {
          //a socket error has occured
          break;
        }
    
        if (bytesRead == 0)
        {
          //the client has disconnected from the server
          break;
        }
    
        //message has successfully been received
        ASCIIEncoding encoder = new ASCIIEncoding();
    //hier hole ich die nachricht
        System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
    //hier antworte ich auf die nachricht
    byte[] buffer = encoder.GetBytes("Hello Client!");
    
    clientStream.Write(buffer, 0 , buffer.Length);
    clientStream.Flush();
      }
    
      tcpClient.Close();
    }
    

    So weit alles in ordnung ABER wenn der Client mir mehrere anfragen stellt???
    wie kann ich zur nächsten anfrage springen bzw. wie kann ich die nächste anfrage auslesen nachdem ich geantwortet habe?


  • Administrator

    theplake schrieb:

    So weit alles in ordnung ABER wenn der Client mir mehrere anfragen stellt???
    wie kann ich zur nächsten anfrage springen bzw. wie kann ich die nächste anfrage auslesen nachdem ich geantwortet habe?

    Was meinst du mit nächster Anfrage? Wenn auf der gleichen TCP Verbindung erneut Daten gesendet werden, dann werden diese von deinem Programm erneut empfangen, da du eine Schleife verwendest.

    Grüssli



  • ja das ist ja auch richtig bloss wie kann ich dem client etwas anderes senden als hello Client? in der gleichen schleife. Bzw. er soll ja in der gleichen Schleife nicht wieder hello client senden.


  • Administrator

    theplake schrieb:

    ja das ist ja auch richtig bloss wie kann ich dem client etwas anderes senden als hello Client? in der gleichen schleife. Bzw. er soll ja in der gleichen Schleife nicht wieder hello client senden.

    Dann musst du ein Kommunikationsprotokoll entwickeln. Je nach dem was der Client dem Server sendet, antwortet der Server entsprechend. Gibt da tausende von Vorgehensweisen ...

    Grüssli



  • theplake schrieb:

    ja das ist ja auch richtig bloss wie kann ich dem client etwas anderes senden als hello Client? in der gleichen schleife. Bzw. er soll ja in der gleichen Schleife nicht wieder hello client senden.

    Nimm das einfachst denkbare Protokoll: Jede Nachricht besteht aus der Anzahl der bytes der eigentlichen Nutzdaten gefolgt von eben diesen Daten.

    Eine andere einfache Möglichkeit wäre zum Beispiel byte stuffing.



  • ja die richtige antowrt sende ich auch aber beim nächsten schleifen durchlauf bleibt der bei read stehen und wartet bis der client WIEDER sendet.Nur das tut der CLient irgendwie net.


Log in to reply