Bonjour à tous,

J'ai une connection TCP/IP indy avec TIdTCPServer et client.
Sur le serveur, je lance mon application: OK
Sur le client je lance mon application: OK
J'envoie quelques données: OK
Sur le client je déconnecte la communication: OK
Sur le client, je veux la relancer: Impossible !
Je veux fermer le programme coté Serveur: Violation d'adresse

Sur le serveur, il rentre dans l'evenement Disconnect() une fois que le client a déconnecté et ne veut plus faire de connect ensuite.

Voici mon code coté 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
 
procedure TfrmMain.ouvrirTCP;
begin
    fermerTCP;
    tcpCMain.Host := txtIp.Text;
    tcpCMain.Port := numPort;
    try
      tcpCMain.Connect;
    except
      SetInfo('Impossible d''ouvrir le port TCP');
    end;
  end;
end;
 
procedure TfrmMain.envoyerTCP(ligne: String);
begin
  if (tcpCMain.Connected) then 
    tcpCMain.Write(ligne);
end;
 
procedure TfrmMain.fermerTCP();
begin
  if (tcpCMain.Connected) then
    tcpCMain.Disconnect;
end;
Et coté 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 TfrmMain.tcpSMainConnect(AThread: TIdPeerThread);
begin
  mmoInfos.Lines.Add('Connecté au '+AThread.Connection.Socket.Binding.PeerIP);
  tcpSMain.Bindings.Clear;
  tcpSMain.Bindings.Add.IP := AThread.Connection.Socket.Binding.PeerIP; // IP de l'autre PC
end;
 
procedure TfrmMain.tcpSMainExecute(AThread: TIdPeerThread);
var
  Line: String;
begin
  While AThread.Connection.Connected do begin
    Line := AThread.Connection.Readln;
    mmoMain.Lines.Add(Line);
  end;
end;
 
procedure TfrmMain.tcpSMainDisconnect(AThread: TIdPeerThread);
begin
  mmoInfos.Lines.Add('Déconnecté');
end;
Qu'est ce qu'il se passe ?