[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Dubbio amletico sulle socket



In data giovedì 19 novembre 2009 08:59:35, Gollum1 ha scritto:

Rispondo a me, per rispondere a tutte e tre le vostre considerazioni, che in 
parte sono anche le mie, ma con qualche dubbio...

In data giovedì 19 novembre 2009 09:07:09, Paolo Sala ha scritto:
> Non ho la minima idea di cosa siano le moxa e di cosa stai facendo tieni
> però conto che colloquiano si sulla stessa porta ma hanno 2 ip
> diversi... quindi non dovrebbero esserci particolari problemi AFAIK!
 
In data giovedì 19 novembre 2009 09:27:43, Michele D'Amico ha scritto:
> Per quanto ne so' io non ci sono problemi:
> Assumendo tutto  UDP
> 1) nei pacchetti che ti arrivano c'e' scritto chi lo ha spedito (ip,porta
>  e mac) 2) quando invii lo spedisci a una destinazione viene gestito in
>  una coda : quindi anche il multi threading non e' un problema e puoi
>  usare un thread per ogni MOXA; l'unica accortezza e' fare un thread di
>  ricezione che faccia da dispacher dei pacchetti in arrivo, infatti se
>  usi + thread indipendenti (es A e B) che ricevono sulla stessa porta
>  puoi trovarti con i pacchetti per B ricevuti da A e viceversa.
> 
> Assumendo tutto TCP (non mi sembra che sia questo caso), tutto e'
> ancora + semplice:
> ogni connessione e' uno stream a se', una volta che la connessione e'
> instaurata (accept o connect) si tratta di "file" in lettura e
> scrittura indipendenti.

In data giovedì 19 novembre 2009 09:34:23, mXo ha scritto:
> Pur non sapendo cosa sia una moxa, i socket funzionano (più o meno e
> generalmente) così:
> -) il server (con ip: ip0) si mette in ascolto su una porta: A
> -) il client (con ip: ip1) fa la connect su ip0:A e viene creato il
> socket (sul client) ip1:B (con B porta scelta a caso fra quelle libere
> sul client)
> -) il server riceve la connect e fa l'accept per cui viene creato il
> socket (sul server) ip0:C (con C porta scelta a caso fra quelle libere
> sul server)
> -) a questo punto il client trasmette al e riceve dal server
> attraverso il socket ip1:B e il server riceve da e trasmette a il
> client attraverso il socket ip0:C
> Schematizzando: (server) ip0:C <-----> ip1:B (client)
> Quindi nessun conflitto... se ho capito quello che chiedevi.


qui posso dare un dato più preciso... 

La Moxa è un'azienda che produce apparati di controllo remoto e tante altre 
cose, nel caso particolare sto usando due apparati "nport5630/16" che 
permettono, attraverso una connessione di rete, di colloquiare con apparati 
seriali (nel contesto preciso sono macchine che usano lo standard RS422).

Ogni unità moxa controlla fino a 16 apparati contemporaneamente.

Il protocollo che utilizzo è l'UDP, e perché la moxa possa rispondere alla 
macchina, sono *obbligato* a creare la socket impostando anche la porta di 
ricezione sul server.

Non vale, quindi, quello scritto da mXo, in quanto non faccio scegliere la 
porta sul server dalla funzione di creazione della socket, ma sono obbligato 
a imporla (in quanto la moxa risponde solo ad un indirizzo e ad una porta 
ben precisa per ogni sua porta, impostabile, ma che vorrei lasciare uguale 
sulle due moxa per semplicità di configurazione e manutenzione).

Per quanto riguarda la risposta di Michele (che ringrazio dell'aiuto di un 
po' di tempo fa sull'UDP, proprio per questo lavoro, ed infatti il programma 
in oggetto è uno sviluppo di quello che mi hai mostrato), il dubbio che mi 
rimane, è se i due thread possono scambiarsi le risposte, anche se nel 
pacchetto UDP dovrebbe essere indicato l'indirizzo della moxa, e quindi il 
riferimento alla socket che ha generato la chiamata... se invece dovesse 
esserci questa possibilità di conflitto, c'é il modo di ributtare la risposta 
sulla porta in modo che sia catturata poi dall'altra socket (forse non è il 
modo più corretto di dirlo, ma credo che si sia capito il concetto).

@Paolo
credo che nella parte precedente sia stato risposto anche alle tue 
considerazioni.

Tnx&Byez
-- 
Gollum1
Tessssoro, dov'é il mio Tessssoro?


Reply to: