Ik ben nu met een programmaatje bezig dat kan communiceren met zowel een POP3- als een SMTP-server. Daarvoor heb ik zelf een connection-class gebouwd die een verbinding opzet en commando's kan versturen.
De data die hij ontvangt wil ik dan weer (asynchroon) uitlezen.
Ik ben al zo ver dat ie netjes de CallBack-functie aanroept:
en
Dit werkt perfect als ik met een POP3-server connect, maar als ik probeer om gegevens te versturen naar een SMTP-server gaat het op een gegeven moment fout. Ik krijg dan een heel vaag bericht:
- de helft van het verwachtte bericht
- deel van een eerder bericht er voor
- letters allemaal door elkaar
Waar kan dit aan liggen?
Ik heb m'n code ook al eens omgebouwd zodat ie op de code uit het help-voorbeeld lijkt, maar toen kreeg ik alleen een string van "\0\0\0..." (even lang als m'n buffersize) terug.
Op Internet komen ze ook steeds met diezelfde oplossing aan of doen ze het gewoon synchroon, dus daar kom ik ook niet verder mee.
De data die hij ontvangt wil ik dan weer (asynchroon) uitlezen.
Ik ben al zo ver dat ie netjes de CallBack-functie aanroept:
C#:
1
2
3
4
5
6
| client = new TcpClient(); client.Connect(server, port); NetworkStream stream = client.GetStream(); client.ReceiveTimeout = timeOut; client.SendTimeout = timeOut; stream.BeginRead(new byte[0], 0, 0, new AsyncCallback(Read), 0); |
en
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| private void Read(IAsyncResult result) { NetworkStream stream = client.GetStream(); result.AsyncWaitHandle.WaitOne(timeOut, true); if (result.IsCompleted) { System.Collections.ArrayList bytes = new System.Collections.ArrayList(); while (stream.DataAvailable) { bytes.Add((byte)stream.ReadByte()); } string line = System.Text.Encoding.ASCII.GetString((byte[])bytes.ToArray(typeof(byte))); stream.EndRead(result); if (line.Length > 0) { OnMessageReceived(new MessageReceivedEventArgs(line)); } } } |
Dit werkt perfect als ik met een POP3-server connect, maar als ik probeer om gegevens te versturen naar een SMTP-server gaat het op een gegeven moment fout. Ik krijg dan een heel vaag bericht:
- de helft van het verwachtte bericht
- deel van een eerder bericht er voor
- letters allemaal door elkaar
Waar kan dit aan liggen?
Ik heb m'n code ook al eens omgebouwd zodat ie op de code uit het help-voorbeeld lijkt, maar toen kreeg ik alleen een string van "\0\0\0..." (even lang als m'n buffersize) terug.
Op Internet komen ze ook steeds met diezelfde oplossing aan of doen ze het gewoon synchroon, dus daar kom ik ook niet verder mee.
edit:
PS. Graag geen hele discussies over "waarom gebruik je niet gewoon synchroon?" of "gebruik gewoon een bestaand component daarvoor", etc.
PS. Graag geen hele discussies over "waarom gebruik je niet gewoon synchroon?" of "gebruik gewoon een bestaand component daarvoor", etc.
[ Voor 8% gewijzigd door maikel op 28-09-2003 13:56 ]