Hallo zusammen, eine grundlegende Frage zu C# und Kommunikation übers Netzwerk mit Sockets: Wenn der Server eine Verbindung akzeptiert hat und die Verbindung aufgebaut ist, wie wird das Empfangen der Daten gehaldelt? Muss man das Ankommen von Daten explizit programmieren und sozusagen immer abfragen ob was da ist? Oder wird von selbst eine Systemfunktion ausgelöst, falls etwas ankommt? Danke für Eure Hilfe.
es geht beides. Man kann einfach ein Read machen, das blockiert bis irgendwann daten kommen oder der Timeout anschlägt. Oder man kann ein Event hinterlegen was aufgerufen wird wenn daten angekommen sind.
Direkt über Socket, TcpClient, UdpClient oder WebRequest, WebResponse, HttpRequest (ab 4.5 auch HttpClient) je nach dem was gebraucht wird/selbst implementiert werden soll.
Peter II schrieb: > Oder man kann ein Event hinterlegen > > was aufgerufen wird wenn daten angekommen sind. wie macht man das? Ich hätte jetzt eigentlich erwartet, dass ein bestimmtes Event für das Ankommen der Daten schon hinterlegt ist, das wiederrum eine Methode ausführen lässt, die man am Ende dann selbst ergänzen muss..
Ralf schrieb: > wie macht man das? Ich hätte jetzt eigentlich erwartet, dass ein > bestimmtes Event für das Ankommen der Daten schon hinterlegt ist, das > wiederrum eine Methode ausführen lässt, die man am Ende dann selbst > ergänzen muss.. du solltest eventuell erstmal die grundlagen von c# lernen. Eine Methode wird dort als eventhandler eingetragen.
Mir gehts erstmal jetzt darum, wie man ein Event hinterlegt, der ausgelöst wird, wenn Daten ankommen. Also es geht mir wirklich um den Anfang wie alles losgeht. Mir ist nicht klar, wie man ein Event genau dem Ankommen von Daten zuordnen kann.
Ralf schrieb: > Also es geht mir wirklich um den > Anfang wie alles losgeht. dann must die MS fragen, man nimmt einfach eine methode und hinterlegt sie als eventhandler und gut ist. Das ist die schnittstelle die man wissen muss mehr nicht.
Peter II schrieb: > Ralf schrieb: >> Also es geht mir wirklich um den >> Anfang wie alles losgeht. > > dann must die MS fragen, man nimmt einfach eine methode und hinterlegt > sie als eventhandler und gut ist. Das ist die schnittstelle die man > wissen muss mehr nicht. Beim TcpClient muss man schon etwas mehr tun. Grob umrissen: Nach der erfolgreichen Verbindung geht's über den Socket mit BeginReceive und einem AsyncCallback. Beispiele sollte man damit finden können.
Arc Net schrieb: > Nach der > > erfolgreichen Verbindung geht's über den Socket mit BeginReceive und Läuft die BeginReceive-Methode automatisch an? Nochmal zu meinem Verständnisproblem: Es hieß ja, ich muss nich pollen, ob Daten ankommen sondern es geht auch über Events. Also wird ein Event ausgelöst, wenn Daten ankommen. Demnach muss ja schon ein Event genau diesem Verhalten (Daten kommen an) zugeordnet sein und ich muss den nur aktivieren oder so. Oder ich muss selber ein Event hinterlegen, muss aber diesen zuordnen können. Denn der soll auslösen, wenn Daten ankommen und nicht wenn ich PC runterschmeiße oder so. Ich verdeutliche das ganze jetzt mit Buttons. Damit ist es einfacher. Button1.Click += new EventHandler(this.GreetingBtn_Click); Hier heißt das Event, dass der Button gedrück wurde einfach Click. Den habe ich nicht selber erfunden, sondern der heißt wirklich so :). Und wenn der Button geklickt wird, wird Event ausgelöst und bearbeitet durch GreetingBtn_Click. Wie ist es jetzt mit Daten empfangen über TCP. Socket.DatenKommenAn += new EventHandler(this.KümmerdichumDaten): ???? Welches Event wird ausgelöst wenn Daten ankommen? Mir gehts inzwischen nicht mehr um C# sondern einfach ums Verständnis.
ich denke ich habs vielleich verstanden. Wenn ich eine Verbindung hergestellt habe, dann kann ich die BeginReceive-Methode aufrufen, der man wie Arc Net schon geschrieben hat, eine AsyncCallBack übergibt. Und der ist anscheinend aktiv, bis ich EndReceive aufrufe. Also ist meine asynchr. Handler-Methode aktiv zwischen den Aufrufen obiger Methoden, und sobald Daten ankommen, wird sie aufgerufen. Da kann ich dann die weitere Verarbeitung vornehmen, weitere Events schmeißen, EndReceive aufrufen usw. Wonach ich gesucht habe, ware ein Event wie OnReceive. Aber sowas gibts anscheinend nicht. Stimmt das wenigstens??? :)
Ralf schrieb: > ich denke ich habs vielleich verstanden. > Wenn ich eine Verbindung hergestellt habe, dann kann ich die > BeginReceive-Methode aufrufen, der man wie Arc Net schon geschrieben > hat, eine AsyncCallBack übergibt. Und der ist anscheinend aktiv, bis ich > EndReceive aufrufe. Also ist meine asynchr. Handler-Methode aktiv > zwischen den Aufrufen obiger Methoden, und sobald Daten ankommen, wird > sie aufgerufen. Da kann ich dann die weitere Verarbeitung vornehmen, > weitere Events schmeißen, EndReceive aufrufen usw. > Wonach ich gesucht habe, ware ein Event wie OnReceive. Aber sowas gibts > anscheinend nicht. Den könnte man selber schreiben.. > Stimmt das wenigstens??? :) Ja http://robjdavey.wordpress.com/2011/07/29/improved-asynchronous-tcp-client-example/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.