Alaska Software Inc. - SOCKET
Username: Password:
AuthorTopic: 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 BorzicRe: 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 CavalloneRe: 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 BaiocchiRe: 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 BaiocchiRe: 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