Socket mit Events (ähnlich Winsock)

28/12/2008 - 13:05 von Michaela Meier | Report spam
Hi,

Ich bastel grade an einem kleinen Email-Client, der bereits als VB6-
Version existiert und dessen Kommunikation natürlich über das Winsock-
Control làuft.

In der .net-Version benutze ich nun ein Socket, mit dem ich aber nur
Probleme habe, wenn ich z.B. beim Auslesen der neuen Mails eine
"synchrone" Schleife benutze. Manche Mails sind dann abgeschnitten
wàhrend die fehlenden Daten die Header der folgenden Mail
durcheinanderbringen.
Ohne ausreichend eingestreute Thread.Sleeps làuft da gar nichts
synchron :-/

Ich würde Socket gerne Event-gesteuert einsetzen so wie es bei Winsock
der Fall war - finde aber nur Beispiele, in denen ein Socket als
Server und nicht als Client eingesetzt wird.

Wie bringe ich einen Client ohne Datenverluste zum Laufen?

Danke

Michaela
 

Lesen sie die antworten

#1 Peter Brightman
29/12/2008 - 11:43 | Warnen spam
Michaela Meier schrieb:
Hi,

Ich bastel grade an einem kleinen Email-Client, der bereits als VB6-
Version existiert und dessen Kommunikation natürlich über das Winsock-
Control làuft.

In der .net-Version benutze ich nun ein Socket, mit dem ich aber nur
Probleme habe, wenn ich z.B. beim Auslesen der neuen Mails eine
"synchrone" Schleife benutze. Manche Mails sind dann abgeschnitten
wàhrend die fehlenden Daten die Header der folgenden Mail
durcheinanderbringen.
Ohne ausreichend eingestreute Thread.Sleeps làuft da gar nichts
synchron :-/

Ich würde Socket gerne Event-gesteuert einsetzen so wie es bei Winsock
der Fall war - finde aber nur Beispiele, in denen ein Socket als
Server und nicht als Client eingesetzt wird.

Wie bringe ich einen Client ohne Datenverluste zum Laufen?

Danke

Michaela



hi Michaela,

arbeite auch seit einer Weile an einem C# mail-client, codename
Tsunamy-mail. Ich benutze einen socket mit asynchronen callbacks,
außerdem eine Art Command-Pattern für die POP3-Commands. Wenn
Daten vom Socket kommen werden diese per event gemeldet, aber
für jeden RETR-Befehl in einem StringBuffer gespeichert bis die
jeweilige mail komplett da ist. Eigentlich setze ich vorher ein
LIST-Kommando ab um die Anzahl bytes für die mails zu erhalten, ich
benutze dann aber tatsàchlich den response des RETR-Befehls für die
Anzahl octets die kommen. Die mail ist komplett wenn du einen Punkt
zwischen zwei CR/LF Zeichen bekommst. Funktioniert bei mir eigentlich
prima, die mails speichere ich derzeit erst mal als *.eml auf Scheibe,
spàter dann mal in einer db4o mit entsprechenden Metadaten.

Wenn Du willst kann ich Dir den source zur Verfügung stellen.

Gruß,

Peter

Ähnliche fragen