Author | Topic: SOCKET | |
---|---|---|
Solving | SOCKET on Wed, 06 Jul 2016 17:26:14 +0200 Salve Qualcuno puo' darmi indicazioni su come implementare un Client Socket ?. Cioe' ho un server socket in ascolto su una porta devo collegarmi tramite Ip locale + porta ed inviare un file in formato simil-xml il cui contenuto contiene dei comandi che verranno intepretati dal Server Socket. Grazie | |
Boris Borzic | Re: SOCKET on Wed, 06 Jul 2016 19:31:28 +0200 Solving <tosolve@alice.it> wrote in news:3926132c$5d66af5d $b8c1e@news.alaska-software.com: > Qualcuno puo' darmi indicazioni su come implementare un Client Socket ?. > > Cioe' ho un server socket in ascolto su una porta > devo collegarmi tramite Ip locale + porta > ed inviare un file in formato simil-xml il cui contenuto contiene dei > comandi che verranno intepretati dal Server Socket. Take a look at Xb2.NET: http://xb2.net/xb2net/ There are samples for creating client (and server-side) XML processing appliations. Best regards, Boris Borzic http://xb2.net http://sqlexpress.net industrial strength Xbase++ development tools | |
Fabio Cavallone | Re: SOCKET on Mon, 11 Jul 2016 10:53:20 +0200 Ciao, è una vita che utilizzo xb2.net.. facendoci di tutto. Confermo che è un ottimo prodotto (visto che puoi realizzare programmi sia a livello che webserver che a livello client) Fabio Cavallone "Solving" ha scritto nel messaggio news:3926132c$5d66af5d$b8c1e@news.alaska-software.com... Salve Qualcuno puo' darmi indicazioni su come implementare un Client Socket ?. Cioe' ho un server socket in ascolto su una porta devo collegarmi tramite Ip locale + porta ed inviare un file in formato simil-xml il cui contenuto contiene dei comandi che verranno intepretati dal Server Socket. Grazie | |
Guido Baiocchi | Re: SOCKET on Mon, 11 Jul 2016 11:27:24 +0200 Il 11/07/2016 10:53, Fabio Cavallone ha scritto: > Ciao, > è una vita che utilizzo xb2.net.. facendoci di tutto. > Confermo che è un ottimo prodotto (visto che puoi realizzare programmi > sia a livello che webserver che a livello client) > > Fabio Cavallone > > "Solving" ha scritto nel messaggio > news:3926132c$5d66af5d$b8c1e@news.alaska-software.com... > > Salve > Qualcuno puo' darmi indicazioni su come implementare un Client Socket ?. > > Cioe' ho un server socket in ascolto su una porta > devo collegarmi tramite Ip locale + porta > ed inviare un file in formato simil-xml il cui contenuto contiene dei > comandi che verranno intepretati dal Server Socket. > > Grazie Salve, io ho implementato una comunicazione via SOCKET verso terminali di rilevazione dati usando le XbTools, sono convinto che xb2.net sia un prodotto di livello superiore però se hai già la licenza delle XbTools sappi che è piuttosto semplice usare le librerie Socket. Ti allego un paio di spezzoni di codice: *** Invio richiesta *** nInfo = Len(cCommand) ::nSocket := SocketNew( , , , @::nErrore ) IF Empty(::nErrore) .AND. ::nSocket >= 0 SocketConnect( ::nSocket ,, ::cServer , ::nPorta , @::nErrore ) IF Empty(::nErrore) IF dfIsTerminal() dbFrameUpd(" IP: "+::cServer+" >>>") ENDIF ::debugTXRX(cCommand) nInfo = SocketSend( ::nSocket, cCommand ,,, @::nErrore) IF Empty(::nErrore) nInfo = Len(cCommand) - nInfo ENDIF ENDIF ENDIF *** Ricezione risposta *** IF SocketSetBlockingMode( ::nSocket , .F. ) IF SocketSetOption(::nSocket,SO_LINGER,{.F.,1}) IF dfIsTerminal() dbFrameUpd(" IP: "+::cServer+" <<<") ENDIF nRic := SocketRecv( ::nSocket , @cInfo , , , @::nErrore ) ::debugTXRX(cInfo) ENDIF ENDIF Se ti serve maggiore aiuto fammi sapere Saluti | |
Solving | Re: SOCKET on Mon, 11 Jul 2016 17:04:36 +0200 Il 11/07/2016 11.27, Guido Baiocchi ha scritto: > Il 11/07/2016 10:53, Fabio Cavallone ha scritto: >> Ciao, >> è una vita che utilizzo xb2.net.. facendoci di tutto. >> Confermo che è un ottimo prodotto (visto che puoi realizzare programmi >> sia a livello che webserver che a livello client) >> >> Fabio Cavallone >> >> "Solving" ha scritto nel messaggio >> news:3926132c$5d66af5d$b8c1e@news.alaska-software.com... >> >> Salve >> Qualcuno puo' darmi indicazioni su come implementare un Client Socket ?. >> >> Cioe' ho un server socket in ascolto su una porta >> devo collegarmi tramite Ip locale + porta >> ed inviare un file in formato simil-xml il cui contenuto contiene dei >> comandi che verranno intepretati dal Server Socket. >> >> Grazie > > Salve, > io ho implementato una comunicazione via SOCKET verso terminali di > rilevazione dati usando le XbTools, sono convinto che xb2.net sia un > prodotto di livello superiore però se hai già la licenza delle XbTools > sappi che è piuttosto semplice usare le librerie Socket. > Ti allego un paio di spezzoni di codice: > > *** Invio richiesta *** > nInfo = Len(cCommand) > ::nSocket := SocketNew( , , , @::nErrore ) > IF Empty(::nErrore) .AND. ::nSocket >= 0 > SocketConnect( ::nSocket ,, ::cServer , ::nPorta , @::nErrore ) > IF Empty(::nErrore) > IF dfIsTerminal() > dbFrameUpd(" IP: "+::cServer+" >>>") > ENDIF > ::debugTXRX(cCommand) > nInfo = SocketSend( ::nSocket, cCommand ,,, @::nErrore) > IF Empty(::nErrore) > nInfo = Len(cCommand) - nInfo > ENDIF > ENDIF > ENDIF > > > *** Ricezione risposta *** > IF SocketSetBlockingMode( ::nSocket , .F. ) > IF SocketSetOption(::nSocket,SO_LINGER,{.F.,1}) > IF dfIsTerminal() > dbFrameUpd(" IP: "+::cServer+" <<<") > ENDIF > nRic := SocketRecv( ::nSocket , @cInfo , , , @::nErrore ) > ::debugTXRX(cInfo) > ENDIF > ENDIF > > Se ti serve maggiore aiuto fammi sapere > > Saluti > > Salve Grazie per le info. conosco xb2.net, non perche' lo uso ma per aver letto molto nei forum e anche perche' mi sono collegato al sito varie volte per curiosita'. Ma voglio provare con quello che propone la lib di alaska. Anche perche' e' un test che voglio fare prima di proporre al cliente un preventivo, e non e' detto che il progetto vada in porto, e prima di fare delle uscite voglio sapere se ci sono delle entrate ) Dunque il problema e' il seguente : Mi dovrei interfacciare con una bilancia che registra il peso di bombole di gas dopo il riempimento, e rilevare un file contenente delle informazioni. La ditta che produce le bilance e' un po' cripitca nel fornire informazioni, l'unica cosa che mi hanno detto e' : ************************************************************************ "L'archivio e' presente dentro al database fisico della macchina al quale si accede aprendo una socket all’indirizzo ip della macchina e inviando alla porta xxxx, il comando xml indicato." "Deve essere creato un client TCP in modo tale che la bilancia possa essere interrogata utilizzando dei comandi incapsulati all’interno di frame xml." Esempio di comando xml : (Recupera tutti i dati di tutti i riempimenti) <Command> <Select> <FieldsList From="DbFl_FillArchive"> <All></All> </FieldsList> </Select> </Command> ************************************************************************ Per Guido Spulciando in Alaska noto che i comandi si trovano nella lib di Asinet e non in xbtools, giusto ? La Stringa cCommand che tu usi puo' essere cosi impostato ? : cCommand := "<Command>" + CRLF +; "<Select>" + CRLF +; "<FieldsList From="DbFl_FillArchive">" + CRLF +; "<All></All>" + CRLF +; "</FieldsList>" + CRLF +; "</Select>" + CRLF +; "</Command>" + CRLF ho devo eseguire tanti SocketSend per ogni Riga ? Purtroppo non ho la bilancia da me, ma dal cliente ad un bel po' di Km di distanza e quindi posso provare il tutto solo collegandomi in teleassistenza. Prendero' spunto dai tuoi esempi per creare qualcosa e poi sottoporro' qui'per saper se faccio bene, e verificarlo ( naturalmente solo sintassi e comandi dei prg ) con il vs. aiuto. In poche parole dovrei fare : 1) Function di Connessione via Socket 2) Se Connesso Function Invio Richiesta 3) Function Ricezione Risposta 4) Chiusura Connessione Grazie. | |
Guido Baiocchi | Re: SOCKET on Mon, 11 Jul 2016 19:01:23 +0200 Il 11/07/2016 17:04, Solving ha scritto: > Il 11/07/2016 11.27, Guido Baiocchi ha scritto: >> Il 11/07/2016 10:53, Fabio Cavallone ha scritto: >>> Ciao, >>> è una vita che utilizzo xb2.net.. facendoci di tutto. >>> Confermo che è un ottimo prodotto (visto che puoi realizzare programmi >>> sia a livello che webserver che a livello client) >>> >>> Fabio Cavallone >>> >>> "Solving" ha scritto nel messaggio >>> news:3926132c$5d66af5d$b8c1e@news.alaska-software.com... >>> >>> Salve >>> Qualcuno puo' darmi indicazioni su come implementare un Client Socket ?. >>> >>> Cioe' ho un server socket in ascolto su una porta >>> devo collegarmi tramite Ip locale + porta >>> ed inviare un file in formato simil-xml il cui contenuto contiene dei >>> comandi che verranno intepretati dal Server Socket. >>> >>> Grazie >> >> Salve, >> io ho implementato una comunicazione via SOCKET verso terminali di >> rilevazione dati usando le XbTools, sono convinto che xb2.net sia un >> prodotto di livello superiore però se hai già la licenza delle XbTools >> sappi che è piuttosto semplice usare le librerie Socket. >> Ti allego un paio di spezzoni di codice: >> >> *** Invio richiesta *** >> nInfo = Len(cCommand) >> ::nSocket := SocketNew( , , , @::nErrore ) >> IF Empty(::nErrore) .AND. ::nSocket >= 0 >> SocketConnect( ::nSocket ,, ::cServer , ::nPorta , @::nErrore ) >> IF Empty(::nErrore) >> IF dfIsTerminal() >> dbFrameUpd(" IP: "+::cServer+" >>>") >> ENDIF >> ::debugTXRX(cCommand) >> nInfo = SocketSend( ::nSocket, cCommand ,,, @::nErrore) >> IF Empty(::nErrore) >> nInfo = Len(cCommand) - nInfo >> ENDIF >> ENDIF >> ENDIF >> >> >> *** Ricezione risposta *** >> IF SocketSetBlockingMode( ::nSocket , .F. ) >> IF SocketSetOption(::nSocket,SO_LINGER,{.F.,1}) >> IF dfIsTerminal() >> dbFrameUpd(" IP: "+::cServer+" <<<") >> ENDIF >> nRic := SocketRecv( ::nSocket , @cInfo , , , @::nErrore ) >> ::debugTXRX(cInfo) >> ENDIF >> ENDIF >> >> Se ti serve maggiore aiuto fammi sapere >> >> Saluti >> >> > Salve > Grazie per le info. > > conosco xb2.net, non perche' lo uso ma per aver letto molto nei forum e > anche perche' mi sono collegato al sito varie volte per curiosita'. > > Ma voglio provare con quello che propone la lib di alaska. > > Anche perche' e' un test che voglio fare prima di proporre al cliente un > preventivo, e non e' detto che il progetto vada in porto, e prima di > fare delle uscite voglio sapere se ci sono delle entrate ) > > Dunque il problema e' il seguente : > Mi dovrei interfacciare con una bilancia che registra il peso di > bombole di gas dopo il riempimento, e rilevare un file contenente delle > informazioni. > La ditta che produce le bilance e' un po' cripitca nel fornire > informazioni, l'unica cosa che mi hanno detto e' : > > ************************************************************************ > "L'archivio e' presente dentro al database fisico della macchina al > quale si accede aprendo una socket all’indirizzo ip della macchina e > inviando alla porta xxxx, il comando xml indicato." > > "Deve essere creato un client TCP in modo tale che la bilancia possa > essere interrogata utilizzando dei comandi incapsulati all’interno di > frame xml." > > Esempio di comando xml : (Recupera tutti i dati di tutti i riempimenti) > > <Command> > <Select> > <FieldsList From="DbFl_FillArchive"> > <All></All> > </FieldsList> > </Select> > </Command> > ************************************************************************ > > > Per Guido Spulciando in Alaska noto che i comandi si trovano nella lib > di Asinet e non in xbtools, giusto ? > > La Stringa cCommand che tu usi puo' essere cosi impostato ? : > > cCommand := "<Command>" + CRLF +; > "<Select>" + CRLF +; > "<FieldsList From="DbFl_FillArchive">" + CRLF +; > "<All></All>" + CRLF +; > "</FieldsList>" + CRLF +; > "</Select>" + CRLF +; > "</Command>" + CRLF > > ho devo eseguire tanti SocketSend per ogni Riga ? > > Purtroppo non ho la bilancia da me, ma dal cliente ad un bel po' di Km > di distanza e quindi posso provare il tutto solo collegandomi in > teleassistenza. > > Prendero' spunto dai tuoi esempi per creare qualcosa e poi sottoporro' > qui'per saper se faccio bene, e verificarlo ( naturalmente solo sintassi > e comandi dei prg ) con il vs. aiuto. > > In poche parole dovrei fare : > 1) Function di Connessione via Socket > 2) Se Connesso Function Invio Richiesta > 3) Function Ricezione Risposta > 4) Chiusura Connessione > > Grazie. > Ciao - Si, la lib è Asinet (scusa mi sono sbagliato) - La mia stringa di comandi era più piccola della tua ma ritengo sia il caso di fare un solo invio con SocketSend - Se possibile io chiederei di girare la porta dal router così da comunicare con la bilancia direttamente dal tuo ufficio - I passi indicati sono corretti, unica nota che aggiungo è che io facevo una serie continua di read e contemporaneamente interpretavo la stringa così che quando arrivava il fine stringa lo sapevo senza aspettare il timeout Saluti |