Salut à tous,
Je dois faire un "réseau" pour dans 9h55, et j'espère qu'il y a un developpeur sympa qui traine encore ici avant qu'il ne soit trop tard.
Bref, je tente d'envoyer une variable d'un type très simple, le type TMyType :
Le problème c'est qu'alors que j'arrive à envoyer des strings très facilement, envoyer ma variable de type TMyType pose problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TMyType = record MyText : string; end;
Ma procédure de reception (directement tirée des exemples fournis avec ICS) est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 procedure TConUdpRcv.WSocketDataAvaible(Sender : TObject; ErrCode : Word); var buffer : TMyType; //<= ici ma variable de type TMyType Len : integer; Src : TSockAddrIn; SrcLen : Integer; begin SrcLen:= SizeOf(Src); Len:= WSocket.ReceiveFrom(@buffer, SizeOf(buffer), Src, SrcLen); Writeln('On recoit quelquechose de ', FSenderAddr.s_addr); if Len>= 0 then begin if (FSenderAddr.S_addr = INADDR_ANY) or (FSenderAddr.S_addr = Src.sin_addr.S_addr) then begin //Buffer[Len]:= #0; FCount:= FCount+1; writeln(IntToStr(FCount), ' '+StrPas(inet_ntoa(Src.sin_addr)), ':'+intToStr(ntohs(Src.sin_port)), ' > '+StrPas(PChar(buffer.MyText))); // c'est sensé afficher le texte end; end; end;
Ma procédure d'envoi est aussi inspirée des fichiers fournis avec ICS :
Voilà, quand je met une variable de type string, ça marche tout seul, mais dès que je tente d'envoyer mon test, ça compile, du côté du serveur on voit qu'on a reçu quelquechose, mais quand je demande de l'afficher, ça ne m'affiche rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 procedure TConCli.Run; var test : TMyType; begin Done:= false; WSocket:= TWSocket.Create(nil); test.MyText:= 'kikou lol'; // j'initialise pour avoir quelquechose à récupérer de l'autre côté ! WSocket.Proto:= 'udp'; WSocket.Addr:= 'localhost'; WSocket.Port:= '600'; WSocket.OnSessionConnected:= WSocketSessionConnected; WSocket.OnSessionClosed:= WSocketSessionClosed; WSocket.OnDataAvailable:= WSocketDataAvailable; WSocket.Connect; while not Done do begin writeln('Appuie sur entrée pour envoyer un truc sexy =) : ',test.Mytext, ''); readln; WSocket.Send(@test, SizeOf(test)); end; WSocket.Destroy; Writeln('appuyez sur entrée pour quitter'); readln; end;
En mettant un breakpoint après le receive, et en testant la valeur des variables, ça me dit que buffer.MyText = '', alors qu'il devrait valoir 'kikoulol'.
Voilà, j'espère que quelqun saura trouver où se situe mon problème.
Cordialement,
iLUV
Partager