Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577

    [C] socket problemi di dati sporchi

    ciao,
    uso solitamente Borland Builder per programmare ed usando i componenti ed i metodi a disposizione di questo ambiente di sviluppo mi sono imbattutto in un problema, quando mi collego a qualsiasi switch della mia LAN ottengo messaggi sporcati da caratteri che non dovrebbero a mio avviso essere presenti.
    Per capire se era dovuto a qualche problema dei componenti di Borland, un qualche baco, ho usato il codice a questa pagina https://msdn.microsoft.com/it-it/lib...=vs.85%29.aspx ma il problema è rimasto.
    Usando Putty o telnet invece, i messaggi che mi arrivano sono puliti: possibile che questi due programmi puliscano/filtrino il buffer dei dati?
    Ultima modifica di misterx; 28-01-2016 a 22:17

  2. #2
    Di che caratteri si tratta?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    credo di aver capito che la stringa che mi invia l'apparato cioè una cosa del tipo: fffb01fffb03fffd18fffd1f si riferisca alla versione di telnet implementata nell'apparato stesso, è solo una supposizione.

    Successivamente mi vengono inviati una serie di caratteri ascii che rappresentano la tabella relativa ai mac address ma accompagnati anche da 0x08 che dovrebbe corrispondere al carattere bell: che significa?

    Quando poi il dialogo tra client e server(lo switch) si ferma con un messaggio --More-- inviatomi dallo switch, io invio uno spazio, ma ho il dubbio che sia l'equivalente di premere la barra spaziatrice e l'invio dei dati da parte dello switch continua.

    Altra particolarità: con Putty dopo aver premuto la barra spaziatrice lo switch invia la rimamenza dei dati, col C invece si deve inviare n volte il carattere 'spazio'=barra_spaziatrice, prima di concludere la completa visualizzazione.

    Che Putty inckluda già di suo le conoscenze degli switch della cisco e quindi molti caratteri o blocchi li filtra?

  4. #4
    Quote Originariamente inviata da misterx Visualizza il messaggio
    Che Putty inckluda già di suo le conoscenze degli switch della cisco e quindi molti caratteri o blocchi li filtra?
    Decisamente no; semplicemente, Putty implementa il protocollo telnet. Nel protocollo telnet, il carattere 0xff (IAC) è riservato per sequenze di escape, e la stringa in questione indica:
    fffb01 => IAC WILL ECHO (è attivo l'echo dei caratteri inviati, per cui quello che scrivi ti viene ri-scritto indietro)
    fffb03 => IAC WILL SUPPRESS-GO-AHEAD (il server non intende inviare i caratteri di "GO AHEAD" (meccanismo di segnalazione necessario per parlarsi su reti half-duplex, inutile su stream TCP full-duplex)
    fffd18 => IAC DO TERMINAL-TYPE (il server è disposto ad iniziare una negoziazione riguardo al tipo di terminale)
    fffd1f => IAC DO NAWS (il server vuole negoziare la dimensione del terminale)

    Sul discorso della barra spaziatrice, è corretto inviare lo spazio, ma non effettua "davvero" l'invio fino a quando non hai riempito il buffer?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    per il momento grazie, mi metto a lavorare

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    mi rimane un dubbio: come faccio a sapere quanto non ho più dati da leggere sulla socket?
    Esiste una particolare sequenza di caratteri che segna la fine della trasmissione?

    grazie

  7. #7
    Se ti viene chiuso il socket in faccia la trasmissione è sicuramente finita ; se invece intendi se è finita la "risposta corrente" del server, no, non c'è nulla di predefinito (o magari c'è qualche estensione che non conosco, ma di norma non si usa), dipende dal protocollo specifico in uso.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    no, la socket non viene chiusa dal server. Allora devo continuare ad accontentarmi: quando leggo il carattere ">" che per me è il prompt, solo allora visualizzo i dati arrivati nel buffer e lo svuoto; non è la soluzione ottima ma funziona e mi consente di mostrare i dati in modo ben formattato.
    Era meglio una sequenza ben definita di caratteri ma da quanto mi fai capire mi devo accontentare di questa soluzione.

    grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.