PDA

Visualizza la versione completa : [DELPHI] Connessione che si disattiva al cambio di form


colde
08-05-2006, 18:20
Ciao a tutti,
non riesco a capire da cosa può dipendere il problema ma ogni volta che da un form mi connetto tramite IdHTTP e successivamente carico un diverso form, la connessione viene persa. Anzi, a dirla tutta apro il form di connessione, attivo il collegamento e chiudo la finestra; clicco su un'altra form per verificare che la connessione sia ancora attiva e mi dice che non lo è ma se riapro il form iniziale per attivare la connessione nuovamente, me la ritrovo ancora attiva! Il nome dell'IdHTTP è sempre lo stesso quindi il componente è uno solo ma per qualche strano motivo non funziona correttamente.

Sapete dirmi cosa può essere?

Oltre a questo problema, quando tento di inviare dei valori mi ritorna il messaggio di errore "unknown protocol"

Questo è il codice:
valori := TStringList.create();
valori.add('hh=20');
valori.add('mm=20');
valori.add('ss=20');
url := '%SET_TIME';
IdHTTP1.Post(url, valori);

L'URL che devo usare è l'indirizzo ip assegnato e in più "%SET_TIME" finale (come url ho provato anche ad assegnare l'ip seguito da "%SET_TIME" ma non è cambiato niente). Può essere questo il problema?
Grazie

alka
08-05-2006, 19:05
Sbaglierò, ma i comandi che stai cercando di inviare non mi sembrano che facciano parte del protocollo HTTP... :master:

colde
09-05-2006, 09:33
ma errori non me ne da durante la compilazione e comunque POST fa parte di HTTP.
Per quanto riguarda gli altri problemi?
Inizialmente usavo IdTCPClient ma non trovando nulla che potesse inviare dei valori tramite POST, ho optato per HTTP. E' corretto? Il mio scopo è dialogare con una macchina tramite HTTP e inviare i comandi da remoto tramite POST.

alka
09-05-2006, 09:55
Originariamente inviato da colde
ma errori non me ne da durante la compilazione e comunque POST fa parte di HTTP.

Sì, ma è ciò che invii tramite POST che mi preoccupa.
Ad esempio, %SET_TIME non mi sembra un valore accettabile da parte del protocollo che, se non ricordo male, normalmente si aspetta di ricevere una locazione, un URL ad esempio, per individuare cosa restituire.


Originariamente inviato da colde
Per quanto riguarda gli altri problemi?

Il problema è uno, al momento, cioè l'errore unknown protocol.
Temo che la periferica con cui stai colloquiando non supporti il protocollo HTTP.


Originariamente inviato da colde
Inizialmente usavo IdTCPClient ma non trovando nulla che potesse inviare dei valori tramite POST, ho optato per HTTP. E' corretto? Il mio scopo è dialogare con una macchina tramite HTTP e inviare i comandi da remoto tramite POST.
Ma questa "macchina" che cos'è? Un PC? Un dispositivo di diversa natura? :master:

colde
09-05-2006, 10:09
Attualmente il "dispositivo" è una specie di PC che viene usato durante le gare sportive per memorizzare i tempi degli atleti. Ora, visto che questo "PC" è un prototipo e ce n'è solo uno per il momento, non potendolo usare ho un emulatore installato in locale che si comporta come se fosse il box (il box sarebbe il "PC"). Questo box dialoga tramite TCP/HTTP e collegandomi all'indirizzo IP di questo box con IE, posso accedere al suo P.d.C. e controllarlo da remoto. Quello che devo fare io è replicare questo P.d.C. con un software ed è quello che sto cercando di fare.

Quel comando "%SET_TIME" dovrebbe essere inviato al box per modificare alcuni paramentri e per farlo da P.d.C. mi basta inserire l'indirizzo ip seguito da quel comando e via POST vengono inviati i nuovi paramentri.

Tu parli di URL ma un indirizzo IP è un URL fino a prova contraria. Non capisco cosa ci possa essere di sbagliato. A menochè io debba usare il TCPClient ma non saprei come inviare dei valori tramite POST, esiste questa possibilità?

Grazie

alka
09-05-2006, 10:24
Originariamente inviato da colde
Quel comando "%SET_TIME" dovrebbe essere inviato al box per modificare alcuni paramentri e per farlo da P.d.C. mi basta inserire l'indirizzo ip seguito da quel comando e via POST vengono inviati i nuovi paramentri.
Ribadisco: siamo sicuri che il protocollo da utilizzare sia HTTP?
E' scritto così anche nella documentazione del dispositivo?


Originariamente inviato da colde
Tu parli di URL ma un indirizzo IP è un URL fino a prova contraria. Non capisco cosa ci possa essere di sbagliato.
Un indirizzo IP non è un URL, è un indirizzo IP.


Originariamente inviato da colde
A menochè io debba usare il TCPClient ma non saprei come inviare dei valori tramite POST, esiste questa possibilità?

Non puoi mica andare a caso. :)
Leggi la documentazione del dispositivo per verificare qual è il protocollo da utilizzare.

Ciao! :ciauz:

colde
09-05-2006, 11:08
Il protocollo è TCP e i valori li devo inviare tramite HTTP/POST. C'è un comando TCP che posso usare per l'invio di questi valori?

alka
09-05-2006, 11:11
Originariamente inviato da colde
Il protocollo è TCP e i valori li devo inviare tramite HTTP/POST. C'è un comando TCP che posso usare per l'invio di questi valori?
Continuo a non riuscire a capire. HTTP è un protocollo basato su TCP.
Puoi fare un esempio, seguendo la documentazione, di un pacchetto di dati che deve essere inviato? Prova a riportare la parte della documentazione che specifica come il comando deve essere inviato, altrimenti - non conoscendo questa informazione - non posso dirti come fare.

colde
09-05-2006, 11:28
Non capisco, essendo HTTP un protocollo di TCP, perchè quando gli invio i valori mi dice protocollo sconosciuto? L'errore non è dell'emulatore o del box ma proprio di Delphi quando raggiunge l'istruzione IdHTTP.Post.

Nel manualetto che ho ora a disposizione non ci sono riferimenti al protocollo da usare, è un'info avuto direttamente dal tecnico che ha sviluppato il prototipo. Ti posto qui il form html che visualizzo con IE collegamndomi all'ip del box, magari può esserti d'aiuto a capire il mio problema:

<form action="wtActiveSettings.html%SET_TIME">
<input name="hour" value="hh" size="2" maxlength="2" align="left" type="text"> : <input
name="minutes" value="mm" size="2" maxlength="2" align="left"
type="text"> : <input name="seconds" value="ss" size="2" maxlength="2"
align="left" type="text"> <input value="[ Set new Time ]"
type="submit">
</form>

alka
09-05-2006, 11:35
Se vuoi sfruttare quel form per impostare il dispositivo, in effetti devi inviare una richiesta HTTP che sia identica a quella che un comune browser invierebbe visualizzando la pagina.

L'URL di destinazione, quindi, equivale a wtActiveSettings.html%SET_TIME, come definito nella action del form in esame.

In secondo luogo, il tag <form> è sprovvisto dell'attributo method con l'indicazione del metodo POST, quindi, in realtà, l'operazione da fare è una GET (verifica se il componente TIdHTTP dispone dell'omonimo metodo).

In sostanza, devi eseguire una operazione di GET che abbia come URL qualcosa del tipo:


wtActiveSettings.html%SET_TIME?hh=00&mm=00&ss=00

sostituendo agli "00" i valori da impostare.

Ciao! :ciauz:

Loading