29 messaggi dal 03 marzo 2009
Ciao a tutti,
mi trovo a dover interagire con una applicazione già esistente, sulla quale non ho alcun controllo e nessuna documentazione, che apre una comunicazione TCP-IP verso di me e mi comunica una serie di informazioni.
Fino a qua nessun problema, gestisco la cosa tranquillamente con il codice che si trova in rete e che si basa su TcpListener

Nel mio caso ho due particolarità:

La prima è che l'applicazione esistente (client) non apre e chiude le connessione per ogni trasmissione, ma ne apre una a inizio lavori e poi la chiude alla fine (tipicamente una giornata di 12 ore)
Questa cosa non mi piace molto, ma alla fine ho fatto dei test e il codice disponibile in rete funziona senza grossi problemi

La seconda è che io devo rispondere alle informazioni in ingresso e, a volte, comunicare sulla connessione aperta di mia iniziativa, e qui mi perdo un po'

Questa la parte di codice relativa alla lettura dei dati in ingresso

While (i <> 0)
i = stream.Read(bytes, 0, bytes.Length)
dataIN = System.Text.UnicodeEncoding.Unicode.GetString(bytes)
End While

Nella situazione esistente il client non chiude mai la connessione e l'app è sempre ferma su i = stream.Read(bytes, 0, bytes.Length)

se voglio all'interno del ciclo posso usare:
stream.Write(msg, 0, msg.Length)
per rispondere quando arrivano informazioni dal client

Ma come faccio invece a inviare un messaggio di mia iniziativa se l'app è sempre ferma su i = stream.Read(bytes, 0, bytes.Length)?

di per se non sarebbe un problema, se attivo un timer che ogni tanto scrive sulla connessione aperta funziona senza problemi, ma io ho bisogno di un altro processo che legge parametri in input su altre connessioni e scrive in output su questa...

Grazie

Paolo B.
100 messaggi dal 01 febbraio 2017
Ciao, penso dovresti implementare dei processi asincroni.
Guarda le istruzioni AWAIT e ASYNC.
Gino.

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]
29 messaggi dal 03 marzo 2009
Ti ringrazio,

lo immaginavo, ma con due processi asincroni posso scrivere/leggere sulla stessa connessione aperta dal client?

Perchè io non posso aprire una nuova connessione verso il client, ma devo scrivere su quella da lui aperta.

Paolo
Modificato da PaoloBerni il 09 gennaio 2020 09:43 -
100 messaggi dal 01 febbraio 2017
PaoloBerni ha scritto:
Ti ringrazio,

lo immaginavo, ma con due processi asincroni posso scrivere/leggere sulla stessa connessione aperta dal client?

Perchè io non posso aprire una nuova connessione verso il client, ma devo scrivere su quella da lui aperta.

Paolo
Modificato da PaoloBerni il 09 gennaio 2020 09:43 -

Su questo aspetto della comunicazione nn saprei, nn conosco il protocollo.
Vediamo se qualcuno magari ti sa rispondere altrimenti dovrai approfondire ...

I processi asincroni sono autonomi ed hai ampia possibilità di gestirli (avviarli, controllarne lo stato, stopparli ecciti).
;-)

Gino.

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]
29 messaggi dal 03 marzo 2009
Io ho cercato di fare una sintesi del problema, ma la mia applicazione già prevede due diversi thread ognuno dei quali si posiziona in ascolto su una diversa porta.

Solo che in un caso parla con dei client che scrivo io, ogni client apre la connessione, scrive una sola stringa di dati, legge conferma ricezione, chiude connessione. Gli altri stanno in coda fino al loro momento

Nel secondo caso parlo con una app già esistente che manda stringhe per tutto il tempo senza chiudere mai la connessione, e che deve ricevere mie comunicazione senza essere in ascolto....

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.