TCPListener empfängt nur 1 mal etwas, obwohl handleClient. Fehler suche.

Fridulin

Erfahrenes Mitglied
Hallo Leute,

ich finde einfach den Fehler nicht. Es geht um folgendes ich Sende etwas zu meinem Server (tcplistener) welcher daraufin Antwortet und wieder zurück etwas zum Server sendet. Nun will ich aber erneut etwas zum Server senden und baue keine neue Verbindung auf, sie sollten sich ja noch in Verhandlung befinden...

So aber bei der 2ten Versand erhalte ich von server keine Nachricht.

Ich Poste hier mal nen Codeschnipsel, hier schaut er nach:

Code:
	listener.Start();
			
				while (!listener.Pending())
				{
				
					TcpClient client = listener.AcceptTcpClient();
					status.Text="Verhandlung beginnt...";
					handleClient(client);
				}


Hier Sieht man was er empfängt, ABER er empfängt nur 1 mal etwas....Bei "MessageBox.Show("empfang3" + empfang);" geht er nur 1 mal in der schleife rein, das bedeutet wie gesgat er Empfängt nichts weiter.....

Code:
private void handleClient(TcpClient client)
		{
	
			NetworkStream stream = client.GetStream();
			Encoding enc = Encoding.UTF8;

			
				byte[] buffer = new byte[1024];
				int read = stream.Read(buffer, 0, 1024);
			
				string empfang = enc.GetString(buffer, 0, read);
				
				
				if (empfang.StartsWith("ich bins "))
				{
				
					einlogversuch(empfang, stream);
				}
				
				if (empfang.StartsWith("Liste schicken, bitte"))
				{
				
					liste_schicken(empfang, stream);
				}
				
				MessageBox.Show("empfang3" + empfang);
				
				
			
			
			}


Nun komme ich zum Sender:

Code:
TcpClient client = new TcpClient();
		client.Connect("192.168.1.2", 1407);
		NetworkStream stream = client.GetStream();
		pb_status.Value = 50;
		sendeNachricht(stream, "ich bins " + tb_name.Text + "," + tb_passwort.Text + "," + eigeneIP);
		
		string Antwort = leseNachricht(stream);
		if(Antwort == "Passwort falsch") 
		{
			
			meldung = "ja, " + Antwort;
			setTextAsync(meldung);
		}
				
		if(Antwort == "Eingeloggt") 
		{
			
			meldung = "Login Erfolgreich";
			setTextAsync(meldung);
			sendeNachricht(stream, "Liste schicken, bitte"); //hier sendet er das nicht nochmal
			//liste_anfordern();
		}

Hier sendet er es noch einmal....

Code:
private static void sendeNachricht(NetworkStream stream, string nachricht)
		{
			Encoding enc = Encoding.UTF8;
			
			byte[] buffer = enc.GetBytes(nachricht + "\r\n");
			sendeBuffer(stream, buffer, buffer.Length);
		}
		
		private static void sendeBuffer(NetworkStream stream, byte[] buffer, int size)
		{
			stream.Write(buffer, 0, size);
		}

Ich hoffe einer von euch kann mir sagen was ich genau falsch mache.

Viele Grüße und Danke für eure Hilfe
Fridulin
 
Zuletzt bearbeitet:

Fridulin

Erfahrenes Mitglied
Hallo,

mißt hat wirklich keiner eine Idee was ich falsch mache bzw. wo der Fehler liegt. Ich komme nämlich einfach nicht weiter.

Viele Grüße, über jede Idee wäre ich sehr Dankbar.
Fridulin
 

Fridulin

Erfahrenes Mitglied
Hallo,

danke für deine Antwort.

Meines funktioniert ja halbwegs nur er Empfängt nur 1 mal etwas, ich denke das ich einen kleinen Denkfehler habe oder sonst irgendwo was falsch gemacht habe....
Aber ich werde mir das natürlich einmal zu gemüte führen.

Viele Grüße
Fridulin
 

Christian Kusmanow

Erfahrenes Mitglied
Hallo Fridulin! :)

Das Thema haben wir schon zig mal durch gekaut. Ich habe Dir auch mal eine OOP gerechte Variante zukommen lassen, finde aber die Sourcen nicht mehr. Kann mich nicht mehr erinnern, ob ich das da mittels Schleifen oder asynchron realisiert habe. Denke mal asynchron.
Wenn Du dem Problem endlich Herr werden willst, machst Dir endlich mal ein paar UMLs und Bildest die Vorgänge in Objekte ab. Und mach eine Demo Applikation und poste sie hier. Wer soll denn aus den Snippeds erkennen können, was da falsch ist.
 

Fridulin

Erfahrenes Mitglied
Hallo,

danke für die Antwort.

Deine Version habe ich leider nicht mehr, wenn du dich errinerst ich hatte nen Computer Absturz und mußte die Fetsplatte formatieren. Ich hatte selbst mein Programm nicht mehr, daß hattest du mir dann noch einmal zugeschickt.

Ich glaube ich werde aber mal versuchen mit ner einfachen Klasse zu Arbeiten und mich ein wenig an das Beispiel orientieren was in den Link von Impi2k ist. Mich hätte zwar schon sehr Interessiert was mein Fehler ist.
Kann es vielleicht sein das in den 2. geposteten Code nochmal ne While Schleife rein muß, er Empfängt dann ja nichts mehr und Verliert wohl die Verbindung zum Clienten.

Viele Grüße
Fridulin
 

Fridulin

Erfahrenes Mitglied
Hallo,

ja super es funktioniert ;-)

Vielen Dank für die Hilfe, ich wünsche schonmal im vorraus ein frohes Fest und einen guten Rutsch ins neue Jahr.
Fridulin

PS: Ich bin trotzdem noch an überlegen mich an der OOP Version von den Link zu orientieren.