|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
[JAVA]: problemi lettura dati binari
Ciao a tutti, vi spiego qual'è il mio problema.
Devo leggere dei dati binari provenienti da un terminale e salvarli su un file binario. Il problema è che quando apro il file mi trovo alcuni dati errati, per esempio: questo è il file di uscita: 1E 20 20 07 30 38 31 32 32 33 questo è il file corretto che dovrei ottenere: 1E 00 00 07 30 38 31 32 32 33 Il metodo che fa questa operazione è fatto in questo modo: Codice:
byte[] buff = new byte[1024];
int ret_read = 0;
try {
InputStream inputStream = telnetClient.getInputStream();
FileOutputStream file = new FileOutputStream("file.dat");;
ret_read = inputStream.read(buff);
while (ret_read >= 0){
file.write(buff, 0, ret_read);
ret_read = inputStream.read(buff);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Secondo voi come posso risolvere? ciao e grazie per l'aiuto che saprete darmi.
__________________
HU Queen Member |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Nov 2007
Messaggi: 122
|
Anch'io ho avuto un tuo stesso problema, ma non sono riuscito a risolvere, ed ho dovuto cambiare linguaggio di programmazione per ovviare
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 263
|
Puó darsi che per qualche ragione i 0x00 vengono trasformati in spazi del codice ASCII (0x20)
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
Quote:
posso evitare che i byte vengano trasformati in codice ASCII ?
__________________
HU Queen Member Ultima modifica di mercury841 : 30-12-2008 alle 14:06. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
nessun altro si è trovato ad affrontare lo stesso problema?
__________________
HU Queen Member Ultima modifica di mercury841 : 31-12-2008 alle 09:08. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non è che è una limitazione della sorgente da cui vai a prendere il file ? Vedo un telnet client.
Prova ad usare come input un altro file e vedi se funziona. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
probabilmente è proprio questo il problema, quando vado a leggere da telnet i dati binari, non so perchè, alcuni dati vengono trasformati in altri. Infatti ho provato a ricopiare un file binario in un altro utillizzando la stessa procedura di sopra e il tutto funziona perfettamente. Non so che fare...
__________________
HU Queen Member |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Probabilmente vengono cambiati i dati sotto 0x20 (sotto lo spazio), perché spesso rappresentano sequenze di escape per i terminali. In pratica si fa per evitare che succeda la stessa cosa che avviene sui terminali *nix quando si fa un cat di un file binario (vengono cambiati tutti i caratteri con simboli strani).
Purtroppo non so se ci sia qualcosa da fare...magari potendo manipolare le impostazioni del server, ma non ne ho idea. Ultima modifica di cionci : 02-01-2009 alle 13:44. |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
http://tools.ietf.org/html/rfc856
Quote:
prova ad utilizzare qualche altra libreria per telnet e vedi se così risolvi... oppure prova se puoi forzare il tuo telnet client attuale ad utilizzare la connessione in modalità binary.
__________________
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
se provo a scaricare questi dati con il protocollo Kermit?
qualcuno sa spiegrami di cosa si tratta? in poche parole quando recupero questi dati binari posso scegliere la modalità tra "direct" e "kermit". Fino ad ora ho sempre utilizzato la prima modalità. Ho l'impressione che utilizzando, invece, il protocollo Kermit riuscirei a risolvere.
__________________
HU Queen Member |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
prova
__________________
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
purtroppo non so come si usa.
__________________
HU Queen Member |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
Effettivamente con il Kermit funziona, l'ho provato con l'HyperTerminal di win. Purtroppo però questa cosa la devo implementare in Java. come faccio ad utilizzare il kermit anche in Java?
__________________
HU Queen Member |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In bocca al lupo:
http://www.faqs.org/rfcs/rfc2840.html Il problema è trovare l'implementazione del protocollo kermit in Java. |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
Potrei utilizzare un programma per effettuare il trasferimento con kermit standalone, e richiamarlo tramite java. Ne conoscete qualcuno?
__________________
HU Queen Member |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Se ti va bene un prodotto commerciale c'è questa libreria [JKermit].
Qui info generiche da wikipedia ENG. Prova a dare un occhio a C-Kermit o Kermit 95. Piuttosto che implementare il protocollo in Java potrebbe essere più abbordabile wrappare qualcosa di esistente e interfacciarsi mediante JNI. @EDIT: purtroppo la libreria standard della Sun lascia un po' a desiderare per quanto riguarda il supporto per il serialIO. Inoltre, da quello che ho letto in giro, la tendenza per sviluppi futuri è orientata verso l'estensione del supporto a basso livello, non ad astrazioni maggiori, come appunto il protocollo Kermit.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 08-01-2009 alle 17:29. |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
Ho trovato un programmino che mi permette di effettuare il download del file tramite protocollo Kermit. Però adesso non so come utilizzarlo tramite Java. In pratica riesco a lanciarlo, però mi blocco perchè non so come inviare dei comandi a questo proagramma. Ho provato anche a lanciarlo passandogli la socket su cui ho stabilito, precedentemente, la connessione telnet in questo modo: link. Però non mi funziona. Qualcuno ha qualche idea?
__________________
HU Queen Member |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Non è così?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
Quote:
Come faccio a tradurre tutti questi passi in una porcedura java???? Cioè io riesco a lanciare l'exe da Java, ma poi come faccio ad inviare i successvi comandi al programma? Più che un programma mi servirebbe una subroutine che mi permetta di eseguire il kermit su una conessione Telnet.
__________________
HU Queen Member |
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Beh, da Java forse potresti lanciare cmd.exe come processo esterno; ti agganci all'inputstream e all'outputstream del tuo processo, e a quel punto passa in input all'outputstream del processo i comandi da eseguire.
Per saperne un po' di più prova a leggerti questi due vecchi topic (oppure fai una ricerca interna nel Forum con le keyword "Java" e "Process"). > [Java] Runtime > [JAVA] inputstream e outputstream di un processo @EIDT: Come ultima spiaggia potrebbe essere sufficente creare al volo un .bat e lanciare quello, anche se come soluzione (ammesso funzioni) è un po' sporca.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 09-01-2009 alle 17:19. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:10.




















