Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    C++ Visual studio: trasmettere e parserizzare xml

    Ciao,
    innanzitutto un saluto a tutti, essendo questo il mio primo messaggio.

    Ho il seguente problema:

    ho un sistema che genera del testo in formato xml e lo invia attraverso connessione ethernet a un altro sistema, che deve ricevere, parserizzare, interpretare il messaggio e rispondere con altro testo, sempre in formato xml.
    Premetto che io sono piuttosto nuovo sia di formato xml che di socket, quindi potrei fare domande banali o ignorare passaggi che probabilmente molti di voi danno per scontati.

    Quello che devo sviluppare è il sistema (un server) che riceve il testo xml, elabora e risponde. Volevo fare un paio di applicazioni di prova prima di sviluppare la parte più corposa: una invia il testo in formato xml, l'altra riceve, parserizza e fa qualcosa (magari stampa a video i vari campi).
    Però sono un po' piantato perchè non so come muovermi. Ho già fatto due applicazioni "sceme" per provare i socket:
    - Nella prima, un thread prende da tastiera dei caratteri (un char[256], per provare) e manda attraverso un socket (con la send(SOCKET s, const char *buf, int len, int flags)) il testo a un altro thread, che riceve con la recv(SOCKET s, char *buf, int len, int flags). Poi, molto stupidamente, stampa a video il messaggio ricevuto.
    - Nella seconda applicazione, ho un file di testo in formato xml, che apro ed analizzo usando la libreria System.xml.dll. In particolare, apro il file creando su di esso un oggetto XmlTextReader ed usando poi le sue funzioni e membri (Read(), NodeType(), ecc...) per parserizzare il contenuto del file.

    Però, l'applicazione che devo sviluppare è un po' diversa. Dal client arriva il testo in formato xml, tutto in una volta, non linea per linea. Quindi non ho un file cui legare il mio XmlTextReader. Come faccio ad analizzare il buf[] che mi arriverà attraverso il socket? Oppure devo cambiare qualcosa, magari prendere il testo che arriva, salvarlo in un file e poi usare l'XmlTextReader su quel file (mi sembra un po' macchinoso, però)? Oppure sbaglio proprio approccio?

    Per completezza, uso Visual Studio 2012. Inoltre, non ho accesso nè possibilità di modificare il client finale. Posso fare un po' quello che voglio finchè faccio delle applicazioni di prova, ma il client finale, sul quale non posso intervenire, invierà a ogni ciclo il testo in formato xml via ethernet (usando il protocollo UDP/IP, tra l'altro, ma penso che per questo basti settare opportunamente le proprietà dei socket), per cui eventuali azioni tipo cambiare il formato del file, mandare una linea alla volta, eccetera non mi sono permesse.

    grazie mille in anticipo per il supporto

  2. #2
    Se comunque lavori in .NET (visto che usi System.Xml) chi te lo fa fare di usare i socket nativi (o più in generale, C++)? Comunque, non c'è problema a ricevere tutto in una volta, dai tutto in pasto all'XmlTextReader passandogli come stream uno StringReader inizializzato con i dati che hai ricevuto.

    Quello che piuttosto non mi è troppo chiaro è il discorso dell'UDP... in TCP l'intera questione è banale, in UDP la dimensione del pacchetto è limitata, per cui o sta tutto in ~512 byte o devi gestire in qualche maniera lo spezzettamento/la ricomposizione del payload.
    Amaro C++, il gusto pieno dell'undefined behavior.

Tag per questa discussione

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.