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
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
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
UNd wie kann ich das schreiben das der immer wieder auf eine neue verbindung wartet?
No Risk, No Fun
Hallo Matrix-NTN,
Initialer Post Heute, 11:29
...
Neuer Beitrag Heute, 12:05
Kann mir den dabei keiner Helfen?
Holla bolla!
herbivore
Hallo Matrix-NTN,
nach 36Minuten zu drängeln, weil noch keiner geantwortet hat, scheint mir ein (unerfreulicher) Rekord zu sein.
herbivore
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!
Kuck doch mal bei Codeproject, die haben da einen sehr schönen Beitrag: http://www.codeproject.com/dotnet/dotnettcp.asp
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
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?
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