Forum: PC-Programmierung C# Socket-Kommunikation


von Ralf (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Arc N. (arc)


Lesenswert?

Direkt über Socket, TcpClient, UdpClient oder WebRequest, WebResponse, 
HttpRequest (ab 4.5 auch HttpClient) je nach dem was gebraucht 
wird/selbst implementiert werden soll.

von Ralf (Gast)


Lesenswert?

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..

von Peter II (Gast)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Arc N. (arc)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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???  :)

von Arc N. (arc)


Lesenswert?

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
Noch kein Account? Hier anmelden.