Bonjour,

J'essaie de réaliser un échange de texte entre un client TTcpClient et un serveur TTcpServer (sans utiliser les composants Indy).
Le serveur est ouvert à la creéation d'un thread. Quand le client se connecte au serveur, l'évènement OnAccept est bien lancé et la préocédure éxécutée avec une affectation du paramètre ClientSocket envoyé par l'évènement à l'objet ServerClientSocket. Seulement, lors de l'éxécution du thread, j'ai une exception EAccessViolation qui intervient au moment de l'utilisation de la procédure ReceiveIn sur ServerClientSocket.
J'aimerais savoir pourquoi ca arrive ?
Qu'est ce que je manque ?
Les objets sont pourtant construit et l'affectation valide.
Merci d'avance 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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
 
unit Unit3;
 
interface
 
uses
  Classes, Dialogs, sockets;
 
type
  TServerThread = class(TThread)
    TcpServer1: TTcpServer;
    procedure TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
    constructor Create();
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;
 
var
  ServerClientSocket:TCustomIpClient;
 
implementation
 
constructor TServerThread.Create();
begin
  inherited Create(True);
  TcpServer1:=TTcpServer.Create(nil);
  TcpServer1.LocalHost:='127.0.0.1';
  TcpServer1.LocalPort:='10000';
  TcpServer1.BlockMode:=bmThreadBlocking;
  TcpServer1.OnAccept:=TcpServer1Accept;
  TcpServer1.Open;
end;
 
procedure TServerThread.Execute;
var
  s:string;
begin
  while Not Terminated do
  begin
    s:='';
    while s='' do
    begin
      s:=s+ServerClientSocket.Receiveln;
    end;
    ShowMessage(s);
  end;
end;
 
procedure TServerThread.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
begin
  ServerClientSocket:=TCustomIpClient.Create(nil);
  ServerClientSocket:=ClientSocket;
  Resume();
end;
 
end.