Beste medetweakers.
Ik heb een socket, dewelke een connection ontvangt, en dan begint te wachten op data.
Dat werkt mooi, en daarvoor heb ik de volgende code:
Werkt leuk.
Mijn SocketPacket is dit:
Werkt ook perfect.
Maar nu: zoals ge in WaitForData kunt zien is de CallBack 'OnDataReceived'.
Deze wordt dus mooi afgevuurd bij inkomende data, de Stream wordt opgevult, en wordt opnieuw meegestuurd met de CallBack. Maar!!! Volgens het voorbeeld op http://msdn2.microsoft.com/en-us/library/fx6588te.aspx (scroll naar beneden voor C# voorbeeld) en op http://msdn2.microsoft.com/en-us/library/w7wtt64b.aspx zou hij die delegate opnieuw moeten afvuren.
Dat doet ie dus niet, waardoor m'n code niets doet. Ik heb al tig dingen proberen aan te passen, maar no go, ik zit muur vast. Google helpt mij ook niet, en de debugger ook niet. Ik heb al tig keer regel per regel gedebugged, en alles lijkt in orde. Ik krijg mooi het pakketje binnen (grootte varieert als ik de tekst veranderd), maar hij wil het niet parsen.
de OnDataReceived CallBack:
Kan iemand mij hier schoppen in de goede richting?
Ik heb een socket, dewelke een connection ontvangt, en dan begint te wachten op data.
Dat werkt mooi, en daarvoor heb ik de volgende code:
C#:
1
2
3
4
5
6
7
8
9
10
11
| /// <summary> /// starts a new receive on the socket /// </summary> /// <param name="socket">the System.Net.Sockets.Socket</param> private void WaitForData(Socket socket) { SocketPacket socketPacket = new SocketPacket(); socketPacket.Socket = socket; socket.BeginReceive(socketPacket.Buffer, 0, SocketPacket.BufferSize, 0, new AsyncCallback(OnDataReceived), socketPacket); } |
Werkt leuk.
Mijn SocketPacket is dit:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| /// <summary> /// SocketPacket, send from the socket to the handler /// </summary> class SocketPacket { /// <summary> /// Constants /// </summary> public const int BufferSize = 1024; /// <summary> /// Properties /// </summary> public System.Net.Sockets.Socket Socket { get; set; } public byte[] Buffer { get; set; } public MemoryStream Stream { get; set; } public SocketPacket() { this.Socket = null; this.Buffer = new byte[BufferSize]; this.Stream = new MemoryStream(); } } |
Werkt ook perfect.
Maar nu: zoals ge in WaitForData kunt zien is de CallBack 'OnDataReceived'.
Deze wordt dus mooi afgevuurd bij inkomende data, de Stream wordt opgevult, en wordt opnieuw meegestuurd met de CallBack. Maar!!! Volgens het voorbeeld op http://msdn2.microsoft.com/en-us/library/fx6588te.aspx (scroll naar beneden voor C# voorbeeld) en op http://msdn2.microsoft.com/en-us/library/w7wtt64b.aspx zou hij die delegate opnieuw moeten afvuren.
Dat doet ie dus niet, waardoor m'n code niets doet. Ik heb al tig dingen proberen aan te passen, maar no go, ik zit muur vast. Google helpt mij ook niet, en de debugger ook niet. Ik heb al tig keer regel per regel gedebugged, en alles lijkt in orde. Ik krijg mooi het pakketje binnen (grootte varieert als ik de tekst veranderd), maar hij wil het niet parsen.
de OnDataReceived CallBack:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| private void OnDataReceived(IAsyncResult async) { SocketPacket socketPacket = (SocketPacket)async.AsyncState; Socket socket = socketPacket.Socket; int read = socket.EndReceive(async); if (read > 0) { socketPacket.Stream.Write(socketPacket.Buffer, 0, read); socket.BeginReceive(socketPacket.Buffer, 0, SocketPacket.BufferSize, 0, new AsyncCallback(OnDataReceived), socketPacket); } else { Message message = (Message)this.binaryFormatter.Deserialize(socketPacket.Stream); this.receiveDelegate(message); this.WaitForData(this.socketWorker); } } |
Kan iemand mij hier schoppen in de goede richting?
Going for adventure, lots of sun and a convertible! | GMT-8