Indy TIdTCPClient recevoir des sms
J'essaie de recevoir du texte dans un idtcpclient mais il ne fonctionne pas. C'est le code que j'utilise un timer:
procedure TForm1.Timer2Timer(Sender: TObject);
var
receivedtext:string;
begin
if idtcpclient1.Connected = true then
begin
with idtcpclient1 do
begin
if not IOHandler.InputBufferIsEmpty then
begin
try
receivedtext := IOHandler.ReadLn;
finally
if receivedtext = '' = false then
begin
showmessage(receivedtext);
idtcpclient1.IOHandler.InputBuffer.Clear;
receivedtext := '';
end;
end;
end;
end;
end
else
begin
timer2.Enabled := false;
end;
end;
De l'intervalle du minuteur est de 8 ms.
La minuterie est activée automatiquement lors de la connexion.
Mais je n'ai pas une messagebox ou une erreur lorsque j'envoie quelque chose.
Je suis sûr que j'ai écrit les données, car quand j'utilise tclientsocket
je ne le recevoir.
Ce que je fais de mal?
- Ne
receivedtext = '' = false
même compiler? (Montrer votre vrai code s'il vous plaît) - Pourquoi avez-vous effacer la InputBuffer? Après un succès en Lecture... opération, Indy va supprimer les octets lus à partir de la InputBuffer.
- Pourquoi avez-vous ce code dans un timer? Avec le code comme indiqué, vous aurez re-entrancy questions, en particulier avec une valeur de minuterie de 8ms.
- Je pense que ton code est complètement faux. Utiliser google pour rechercher des exemples, comme la ... sourceforge.net/projects/indy10clieservr Première démo dans il devrait y aider "1_sample Chaîne Simple Échange"
Vous devez vous connecter pour publier un commentaire.
Utiliser quelque chose comme ceci à la place:
Avec cela dit, ce genre de code serait mieux mis en œuvre à l'aide d'un thread au lieu d'une minuterie.
1 - Créer une nouvelle classe dérivée de
TThread
(Fichier > Nouveau > Autres > Objet Thread)2 - Modifier votre code de connexion: