Com TCP/IP Problème TClientSocket et Indy
Bonjour à tous.
Je débute en com sur TCP/IP et je suis en cours de développement d'un client pour une liaison avec un automate Schneider (Serveur Carte ETY5103) en modbus IP.
Je sèche malgré diverses recherches et tests, je viens donc vous solliciter.
Mon ou mes problèmes se situent sur l'utilisation des composants socket.
J'ai donc testé deux méthodes avec pour chacune les soucis suivant:
Avec TClientSocket:
Les échanges fonctionnent mais lorsque le serveur est sur le réseau Ethernet local, la connexion et les échanges sont beaucoup plus lent qu'avec le serveur distant sur internet!!
Avec Indy TidTCPClient:
Les connexions sont rapide dans les deux cas (Local ou distant), mais je ne parviens pas à récupérer correctement la réponse du serveur dans la procédure ci-dessous, qui n'est pas toujours appelée!!
Code:
1 2 3 4 5 6 7 8 9 10
|
procedure TForm1.Client1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
var str: string;
begin
str := Client1.IOHandler.ReadLn;
Trame_rx := str;
conv_trame_rx;
ListBox1.Items.Insert(0, 'RX '+Trame_rx_aff);
end; |
Merci d'avance de votre aide.
Thierry
toujours pas de réception !!
Bonjour Shai
Merci de tes réponses
Je suis en D7 et D2006, j'ai testé dans les deux versions.
Pour les caractères de fin de Trame je doit oublier car je ne maitrise pas la terminaison de la trame de réponse.
En fait je captais quelque chose par ce que je ne contrôlais pas : if AWorkMode = wmRead then...
J'ai donc testé TTCPClient qui se connecte correctement dans les deux cas (local/Distant).
L'envoie de données est correcte avec la méthode :Tcpclient1.SendBuf(LBuffer,12,0);
Par contre je ne capte toujours pas les données reçues, toujours pas d'évènement OnReceive :
Code:
1 2 3 4 5 6 7 8 9 10 11
| procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);
var Recept:string;
begin
Showmessage('on Receive') ;
Recept := Buf[DataLen];
Trame_rx := Recept;
conv_trame_rx;
RichEdit1.Lines.Add('RX '+Trame_rx_aff);
end; |
J'ai testé en mode bloquant et non bloquant idem pour OnReceive par contre en mode non bloquant l'évènement OnConnect disparait. Est-ce normal?
Comment gère t'on le buffer de réception???
Quand à Indy j'obtiens encore moins de résultat..
Merci d'avance de ton aide
Thierry