Bonjour,
J'ai crée une démo simple de type client-serveur en TCP avec les composants Indy9. J'ai besoin (pour un programme) de mémoriser la SocketHandle pour envoyer et recevoir depuis elle et non depuis le AContext.Connection.IOHandler.
Mon problème est qu'au niveau du serveur je n'arrive pas à envoyer ou à recevoir des données au client. Idem côté client, je n'arrive pas à envoyer vers le serveur. Voici mon code:
Client:
Serveur:
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 procedure TForm1.LancerClient(Sender: TObject); begin IdTCPClient.Connect; Memo.Lines.Add('Client 1 connecté.'); {//Envoi classique IdTCPClient.IOHandler.Write('essai'); IdTCPClient.IOHandler.Write(#$D#$A'.'#$D#$A);} //Envoi avec le TIdSocketHandle: ne marche pas PermanentConnectionClient:=IdTCPClient.Socket.Binding; StringStream:=TStringStream.Create('essai'); try //PermanentConnectionClient.SendTo('192.168.0.13',8080,ToBytes(StringStream.DataString)); i:=PermanentConnectionClient.Send(ToBytes(StringStream.DataString),StringStream.Size); Memo.Lines.Add('nb byte envoyé: '+IntToStr(i)+'.'); finally StringStream.Free; end; ReceivedString := IdTCPClient.IOHandler.ReadLn(#$D#$A'.'#$D#$A); if ReceivedString = '' then Memo.Lines.Add('Pas de réponse de la part du serveur après ' + IntToStr(IdTCPClient.ConnectTimeout) + ' millisecondes.') else Memo.Lines.Add('Client Recu:'+ ReceivedString); IdTCPClient.Disconnect; end;
Merci de vos réponses
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 procedure TForm1.Execute(AContext: TIdContext); begin //Utilisation TIdSocketHandle //IdTCPServer.Bindings.Clear; PermanentConnectionServeur:=IdTCPServer.Bindings.Add; //PermanentConnectionServeur:=AContext.Binding; PermanentConnectionServeur.IP:='192.168.0.13'; PermanentConnectionServeur.Port:=8080; //Reception avec le TIdSocketHandle: ne marche pas PermanentConnectionServeur.Receive(DataThread); StringRecv:=String(DataThread); //Envoi avec le TIdSocketHandle: ne marche pas StringStream:=TStringStream.Create('essai'); try i:=PermanentConnectionServeur.Send(ToBytes(StringStream.DataString),StringStream.Size); Memo.Lines.Add('nb byte envoyé: '+IntToStr(i)+'.'); finally StringStream.Free; end; end;
Partager