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:

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;
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
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;
Merci de vos réponses