Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1

    inviare un comando via socket in java

    come da oggetto... devo spedire ad un host un comando via socket in Java (una stringa, precisamente BL01). Pero' sembra che il comando non parta... ho provato a vedere anche con un socket sniffer ma rimane muto

    creo il socket
    pesaSocket = new Socket("192.168.5.31", 7000);
    out = new DataOutputStream(pesaSocket.getOutputStream());
    out.writeChars("BL01");
    out.flush();

    in pratica anche dopo il flush sullo sniffer non mi appare niente... cosa sbaglio?

    Grazie


  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Senza andare a scomodare gli sniffer (posti dove, poi?) cosa fai lato server?
    Dal punto di vista della parte client non c'è nulla di "palesemente sbagliato".
    Ovviamente, non possiamo sapere se la connessione avviene correttamente, se l'outputstream viene aperto correttamente... non sappiamo nulla della gestione delle eccezioni, quindi dobbiamo presumere che tutto vada a buon fine.

    PS: parli di "comando", ma ciò che si invia su socket (o su qualunque altro canale) è un insieme di dati... che il server interpreta a modo suo.


    Ciao.
    Ultima modifica di LeleFT; 27-03-2015 a 15:06
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    pultroppo lato server non so bene cosa accade ... devo replicare le chiamate di un software scritto in VB (credo) che dialoga con un programma lato server . Con un packet sniffer ho visto che la chiamata che questo sw fa è cosi':
    S1.jpg

    in pratica apre una chiamata sulla porta 7000 e fa un paio di send calls (mandando la stringa BL01 seguita dall'ascii FF).
    Non ho idea se in Java posso parlare con un socket scritto in VB, e soprattuto non so se lo sto facendo nel modo giusto, solo che il mio eseguibile va perfettamente dritto senza errori, ma secondo lo sniffer io non apro nessun socket.

    la ditta che manteneva questo software e' sparita (viva la crisi) quindi non so che altro fare e a chi altri chiedere info...


  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Popper Visualizza il messaggio
    in pratica apre una chiamata sulla porta 7000 e fa un paio di send calls (mandando la stringa BL01 seguita dall'ascii FF).
    Innanzitutto FF non è una stringa (non devi certo mandare due 'F') e non è neppure ASCII nel senso proprio del set di caratteri ASCII.
    È semplicemente 1 byte con tutti i bit a '1'.

    Quel 255 (0xFF) è una sorta di "terminatore" di ogni comando? Io ovviamente non lo posso sapere ....

    Nel tuo codice iniziale non si vede alcuna gestione di questo 0xFF. Tra l'altro, writeChars NON va bene, perché ciascun carattere viene inviato come 16 bit (2 byte) proprio secondo lo Unicode (UTF-16) e oltretutto in Big-Endian (il byte "alto" viene per primo).

    Quindi out.writeChars("BLO1") (qui ho messo O invece che 0) invierebbe 8 byte:

    00 42 00 4C 00 4F 00 31

    E se lo screenshot è la sequenza giusta ... ovviamente non è assolutamente corretto!
    Dovresti usare writeBytes(String s) che scarta il byte alto e funziona perlomeno con caratteri ASCII o al massimo ISO-8859-1.


    Quote Originariamente inviata da Popper Visualizza il messaggio
    Non ho idea se in Java posso parlare con un socket scritto in VB
    In generale, certo che è possibile! Basta solo conoscere i dettagli del "protocollo" di comunicazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Che programma vi sia lato server non ha importanza, quello che è da capire è se il server accetta o meno la comunicazione.
    Poi bisogna capire che tipo di protocollo utilizza. Da quel che posso "intuire" non si tratta di un protocollo testuale, ma binario. Quello che stai facendo tu, invece, è inviare del testo sul socket (e nemmeno completo... manca, appunto, quel 0xFF alla fine).

    Tieni presente che il software sta inviando la scritta BLO1 (BI, ELLE, O, UNO), mentre tu nel tuo codice hai scritto BL01 (BI, ELLE, ZERO, UNO).

    Io proverei a cambiare approccio.

    codice:
    Socke pesaSocket = null;
    OutputStream out = null;
    try {
       pesaSocket = new Socket("192.168.5.31", 7000);
       out = pesaSocket.getOutputStream();
       byte[] data = {(byte) 0x42, (byte) 0x4c, (byte) 0x4f, (byte) 0x31, (byte) 0xff};   //BLO1
       out.write(data, 0, data.length);
       out.flush();
    } catch (Exception e) {
       e.printStackTrace();
    } finally {
       if (out != null) {
          try { out.close(); } catch (Exception e) { }
       }
       if (pesaSocket != null) {
          try { pesaSocket.close(); } catch (Exception e) { }
       }
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    te devi aprire un socket verso il server e mandare due stringe, BLO1 e SBL, ovvero in hex: 42 4C 4F 31 e 53 42 4C. FF è la terminazione del messaggio. Quindi apri un socket verso il server e mandagli quelle due stringhe di testo.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    grazie delle risp.
    Non ho idea di che cosa mandava il programma "vecchio" al server , quindi mi sono appoggiato allo sniffer, tentando di replicare appunto la cosa in java (VB non ce l'ho manco installato).
    Il problema principale e' che quando tento di aprire la connessione con il programmino fatto in java lo sniffer non da segni di vita (quindi sembrerebbe che proprio non si apra la connessione, al di là della stringa di comandi che gli mando...).
    In ogni caso per il momento mi sono fermato con i test , riprenderò nei prox giorni e vi terro' aggiornati grazie intanto a tutti


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.