[c#] Socket, hoe data te ontvangen zodra het aankomt

Pagina: 1
Acties:

  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
Beetje vage topic titel, maar wist geen betere.

Hoe kan ik in C# data uitlezen van een socket zodra deze wordt aangeleverd. Ik heb een zooitje tutorials gezien en ook de help van MS, maar die laten allemaal voorbeelden zien waar ik zelf moet vragen of er data klaar staat om gelezen te worden.
In bijvoorbeel Borland C++ builder heb je dit soort functies er standaard in zitten. Dus als er iets naar de client gestuurd wordt door de server dan gaat er singnaal binnen het programma, waardoor ik weet dat er data klaar staat. Hierdoor hoef ik zelf niet te vragen of er data is, maar wordt het mij verteld.

Iemand een idee over hoe ik dit kan doen?

Ik stink niet, ik ruik gewoon anders


  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
Je moet eens zoeken naar de method Available() ofzo ...

Daarmee kun je controleren of er data op de lijn is dat kan uitgelezen worden.

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


  • nhimf
  • Registratie: September 2000
  • Laatst online: 19-08 10:00

nhimf

Lekker belangrijk allemaal

Topicstarter
Ja maar dat is dus niet wat ik wil. Dan moet ik zelf gaan vragen of er data is. Ik wil verteld worden dat er data is (dmv een handler oid)

Ik stink niet, ik ruik gewoon anders


  • alley
  • Registratie: Mei 2002
  • Laatst online: 18-08 20:40

alley

ahuh

je moet gebruik maken van een listener... Voor het TCP protocol is er bijvoorbeeld de System.Net.Sockets.TcpListener

[ Voor 19% gewijzigd door alley op 15-04-2003 08:39 ]

I am always doing that which I can not do, in order that I may learn how to do it. (Pablo Picasso)


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:02
Ik denk dat een TcpListener enkel luistert naar connectie-requests, en zich verder niet bezighoud met andere inkomende data.

https://fgheysels.github.io/


  • TeeDee
  • Registratie: Februari 2001
  • Nu online

TeeDee

CQB 241

Bedoel je zoiets: http://www.c-sharpcorner.com/Network/IrcBotPH.asp

Dit is een IRC Botje geschreven in C#, die wacht tot er iets is, en dan voert ie iets uit.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:02
Neen, die bot gaat ook iedere keer gaan 'pollen' of er iets uit te lezen valt zie:
code:
1
while ( (inputLine = reader.ReadLine () ) != null )

offtopic:
Ik vraag me af of dat trouwens zonder problemen werkt, zie: [rml][ C#] Threads, StreamReaders en de documentatie...[/rml]
(Zit trouwens nog altijd met hetzelfde 'probleem' :P


De topicstarter wil hier dus een mogelijkheid dat hij verwittigd wordt als er data uit te lezen valt. Bv, een event dat getriggered wordt van zodra er data beschikbaar is op de socket.

https://fgheysels.github.io/


  • TeeDee
  • Registratie: Februari 2001
  • Nu online

TeeDee

CQB 241

whoami schreef op 15 april 2003 @ 09:48:
offtopic:
Ik vraag me af of dat trouwens zonder problemen werkt, zie: [rml][ C#] Threads, StreamReaders en de documentatie...[/rml]
(Zit trouwens nog altijd met hetzelfde 'probleem' :P
:offtopic
Ik heb bovenstaande code gecompileerd, en getest (deze bot 2 maanden laten draaien!) en ik heb nergens problemen ermee gezien.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:02
offtopic:
Ik las m'n socket uit in een thread. Misschien dat het daar wat mee te maken heeft.

https://fgheysels.github.io/


Verwijderd

Gebruik daarvoor de method BeginReceive(). Aan die method kan je een delegate (simpel gezegd: call-back functie) geven.

Zoek in de help van MS VS.NET naar "Asynchronous socket", je vindt daar ook voorbeelden over het gebruik van delegates.

Daarnaast is in het hele .NET framework begin....() methods opgenomen die asynchroon taken uitvoeren!

  • abeker
  • Registratie: Mei 2002
  • Laatst online: 07-08 15:52

abeker

...

Je kunt wel degelijk voor zorgen dat een functie aangeroepen wordt zodra er data binnen komt, dit gebeurt dmv callbacks. Zoek maar eens op asynchrone communicatie icm sockets

the less one forgets, the less one remembers

Pagina: 1