Newsgroup: it.comp.lang.delphi
Titolo: Invio comandi con IDTCPClient

Sto ricompilando su XE2 + Indy 10 un mio programma che invia comandi ad 
un registratore di cassa via ethernet
Nella versione precedente (D2006) mi bastava semplicemente "Scrivere" la 
stringa sul componente Indy
 
Ora, dopo innumerevoli tentativi, non riesco ad inviare correttamente 
gli stessi comandi-
 
Ad es.
command := TEncoding.UTF8.GetBytes(comando);
IdTCPClient1.Socket.Write(command);
ma il registratore non dà risposta.
 
idem con:
MessageToSend : TBytes;
...
for I := Low(command) To High(command) Do
   MessageToSend[I] := command[I];
IdTCPClient1.Socket.Write(MessageToSend,length(messageToSend));
 
 
Ho analizzato con wireshark i caratteri inviati e sembrano corretti
 
Qualche suggerimento?

 Ho analizzato con wireshark i caratteri inviati e sembrano corretti 
 
Scusa, che vuol dire "sembrano"?
 
 
Se il comando non ha caratteri strani io proverei a dichiarare una  stringa AnsiString, cablare un comando e vedere cosa succede:
 
var
  MessageToSend : Ansistring; //<<-----------------
 
begin
  MessageToSend := 'non so';
  IdTCPClient1.Socket.Write(MessageToSend,length(messageToSend));
 
A.

   IdTCPClient1.Socket.Write(MessageToSend,length(messageToSend));
 
Magari io ho le idee confuse, ma non credo sia cosi complesso cercare da se come si invia una stringa via componente tidtcpclient.
 
Ti auguro ri risolvere il tuo problema.
 
A.
 
 
 
 


Anch'io..
Ti ringrazio comunque per l'interessamento
 

Ok. 
Posta un pezzo di codice completo (invio comando + ricezione della risposta).
Magari qualcosa salta fuori.
 
A.


Composizione della stringa di comando
 
STX    inizio frame              1 byte   02h
CNT    contatore frame           2 bytes  00###99
IDENT  identificatore            1 byte   0 fisso
MSG    messaggio hdr1+hdr2+dati
CKS    Checksum                  2 bytes  00###99      somma modulo 100 
di CNT+IDENT+MSG
ETX    Fine frame                1 byte   03h
 
procedure TFormScontrinoFiscale.scriviRiga(comando:String);
var
riga:String;
i,l:integer;
command:TBytes;
MessageToSend : TBytes;
begin
// la stringa comando è certamente corretta
// se usata con un collegamento seriale (oppure con apposito programma 
test) funziona correttamente
 
// primo tentativo
IdTCPClient1.Socket.Write(comando);       // nessuna risposta
 
// in alternativa secondo tentativo
command := TEncoding.UTF8.GetBytes(comando);
IdTCPClient1.Socket.Write(command);       // nessuna risposta
 
// in alternativa terzo tentativo
command := TEncoding.UTF8.GetBytes(comando);
SetLength(MessageToSend,Length(command));
IdTCPClient1.Socket.Write(command);       // nessuna risposta
 
// in alternativa quarto tentativo
for I := Low(command) To High(command) Do
   MessageToSend[I] := command[I];
IdTCPClient1.Socket.Write(MessageToSend,length(messageToSend)); // 
nessuna risposta
 
end;
 

Domande e suggerimenti sparsi
 
1) eseguendo da IDE hai attivo lo "notify on language exception"?
 
2) hai provato a lanciare un tracert e vedere se e come arrivi al device?
 
3) se sullo stesso pc fai la stessa cosa con la tua vecchia versione di delphi funziona?
 
4) giusto per scrupolo, controllare sul pc che stai usando le impostazioni firewall ed eventuali messaggi nel registro degli eventi di windows
 
5) scrivi una app di test con un tidtcpserver che alla ricezione della stringa te la srive su un txt o altro.
Falla girare su un pc DIVERSO da quello che usi per sviluppare e vedi cosa succede. 
 
6) prova a dichiarare MessageToSend array[0..x] of ANSICHAR e vedi se cambia qualcosa. Ovviamente (ma non per tutti) x sta per il totale dei bytes -1.
 
Nota
Poche settimane fa ho fatto un tester per l'invio di richieste http ad un centralino voip.
Fatta girare in delphi7 non funzionava, mo non ricordo se andava in timeout o se semplicemente non succedeva nulla.
Poi creato una copia dello stesso progetto, l'ho aperto ed eseguito da xe5 e ha funzionato al primo colpo.
 
A.
 


Ciao a distanza di diversi anni mi ritrovo con lo stesso identico problema e non riesco a capire quale sia il problema. Avevi poi risolto? Riesci a darmi una dritta?