Laden...

Netzwerkverbindung TCP/IP über sockets HIlfe

Erstellt von Matrix-NTN vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.683 Views
M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren
Netzwerkverbindung TCP/IP über sockets HIlfe

Hallo zusammen,

ich habe heute mal veruscht ein Server Programm zu schreiben das mir immer wenn ich etwas auf einen bestimmten Port sende mir es anzeigt.

Mein COde:


	private void button1_Click(object sender, System.EventArgs e)
		{
			Thread t = new Thread(new ThreadStart(reader));
			t.Start();

		}

		public void reader()
		{
			int Port = 9100;
			string ServerNachricht="";
			TcpListener tl = new TcpListener(Port);
			tl.Start();
			richTextBox1.AppendText("Server gestartet"+"\r\n");
			Socket soc = tl.AcceptSocket();
			richTextBox1.AppendText("Verbunden:\r\n");
			NetworkStream ns = new NetworkStream(soc);
			StreamReader sr = new StreamReader(ns);
			StreamWriter sw = new StreamWriter(ns);

			while(ns.DataAvailable)
			{
				
				ServerNachricht = sr.ReadToEnd(); 
				//ServerNachricht = sr.ReadLine();
				if(ServerNachricht != "")
				richTextBox1.AppendText(ServerNachricht +"\r\n");
			}
			richTextBox1.AppendText("Beendet:\r\n");
		}

So einmal funktioniert das auch aber wenn ich dann nocheinmal etwas schicke geht das nicht mehr kann mir da einer helfen?

Mfg
Tobias

No Risk, No Fun

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

Kann mri den dabei keiner Helfen ist doch nur das Problem das ich nur einmal was empfangen kann...
Das liegt denke ich mit dem Thread zusammen udn da kenne ich mich net so aus...

Mfg
TObias

No Risk, No Fun

P
939 Beiträge seit 2003
vor 19 Jahren

Ich kann dir sagen was da im Code passiert.
Die Zeile Socket soc = tl.AcceptSocket(); blockiert, bis sich ein Client am Port verbindet. Im Anschluss werden Daten vom Client empfangen. Sendet der Client im Augenblick nichts, liefert ns.DataAvailable false zurück und die Methode wird verlassen.

Gruss
Pulpapex

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

UNd wie kann ich das schreiben das der immer wieder auf eine neue verbindung wartet?

No Risk, No Fun

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo Matrix-NTN,

Initialer Post Heute, 11:29

...
Neuer Beitrag Heute, 12:05
Kann mir den dabei keiner Helfen?

Holla bolla!

herbivore

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

Was soll das heißen???

No Risk, No Fun

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo Matrix-NTN,

nach 36Minuten zu drängeln, weil noch keiner geantwortet hat, scheint mir ein (unerfreulicher) Rekord zu sein.

herbivore

E
100 Beiträge seit 2005
vor 19 Jahren

Mit den Listener auf einen Einschlag zu warten ist nur der Anfang....

Sobald du den Socket hast (accept) kannst du den listener in die Ecke werfen, und arbeitest mit dem Socket weiter. Ob Synchron oder Ansynchron musst du selbst wissen, dazu gibt es allerdings in der MSDN reichlich Tutorials.

Nebenbei gemerkt wirst du über die normalen Properties des Socket NIE feststellen ob die Verbindung noch besteht oder nicht, solange du nicht versuchst zu empfangen und das in die Hose geht.

Ich habe zumindest noch keinen zuverlässigen Weg gefunden.

Wenn es nicht zwingend TCP sein muss, versucht mal UDP.

--
Man kann Scheisse nicht polieren!

341 Beiträge seit 2004
vor 19 Jahren

Kuck doch mal bei Codeproject, die haben da einen sehr schönen Beitrag: http://www.codeproject.com/dotnet/dotnettcp.asp

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

Also ich habe die Beispiele mal alle so durchprobiert habe es auch mal onch hinbekommen das ich was empfange...

Aber dann kommt ein zweites Problem:

Der Client ist eiin Drucker der mir was auf den port 9100 sendet.

Ich bekomme das auch aber er löscht den druckauftrag erst wenn ich mein Programm beendet habe an was kann das liegen muss ich dem noch antworten irgendwie?

Mfg
Tobias

No Risk, No Fun

341 Beiträge seit 2004
vor 19 Jahren

Du könntest versuchen, soweit der Auftrag empfangen wurde, die Verbindung zum Client(Drucker) einfach zu schließen. Wenn der Drucker wieder drucken möchte dann baut er einfach wieder neue Verbindung auf.
Ist das eine Lösung?

M
Matrix-NTN Themenstarter:in
267 Beiträge seit 2005
vor 19 Jahren

Das habe ich schon Probiert habe meinem Server gesagt :
Server.StopListening();
und dann wieder
Server.StartListening();

Aber das ist dem Drucker egal

No Risk, No Fun