Sto sviluppando un software che fa uso di socket per connettersi con più
apparati esterni attraverso due interfacce eth-rs422 (MOXA)...
ho risolto quasi tutti i problemi, e il software sta entrando nella fase
finale, fra poco comincerò con il collaudo con più macchine invece di una
soltanto...
il dubbio che mi rimane è questo:
nella definizione della socket devo indicare:
- indirizzo locale e remoto (il server e la moxa per intederci)
- porta locale e remota
il mio dubbio è proprio sulla selezione della porta:
per semplificare le procedure di configurazione delle due moxa, la loro
configurazione viene semplicemente copiata da una all'altra, e si cambia il
solo indirizzo IP. la definizione delle porte invece è identica per entrambe
(da 4001 a 4016)
per semplicità anche le porte di risposta per entrambe le moxa dovrebbe
essere da 4001 a 40016
ora, se io dovessi interrogare contemporaneamente due macchina, la prima
della moxa 1 e la prima della moxa 2, le socket sarebbero giustamente
differenti, in quanto cambia l'indirizzo remoto, ma entrambe lavorano sulla
porta locale 4001...
potrebbero esserci dei conflitti se pur lavorando su due socket diverse,
ricevono i dati sulla stessa porta? oppure la costruzione delle socket
riesce a distinguere quello che va da una parte, e quello che va dall'altra?
il programma che comunica sulle socket è lo stesso, ma in due istanze
diverse e completamente separate (viene richiamato una volta per ogni
interrogazione, quindi quando ho interrogazioni parallele mi ritrovo con più
istanze dello stesso programma).
Tnx&Byez
--
Gollum1
Tessssoro, dov'é il mio Tessssoro?
--
Per REVOCARE l'iscrizione alla lista, inviare un email a
debian-ital...@lists.debian.org con oggetto "unsubscribe". Per
problemi inviare un email in INGLESE a listm...@lists.debian.org
To UNSUBSCRIBE, email to debian-ital...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listm...@lists.debian.org
Ciao
Piviul
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.
Per quanto riguarda la risposta di Michele [...], 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).
per il momento mi sto studiando se esiste la possibilità di creare un file di
configurazione delle moxa che possa essere velocemente inviato via telnet
(che è il modo di configurare questa macchina)...
se riesco a fare in modo che con un solo comando si possa fare la
configurazione completa della moxa, setto le moxa con indirizzi IP
consecutivi, e con porte consecutive, in questo modo semplifico tutto il
discorso... non ho più sovrapposizioni di porte, e quindi tutto procederà in
modo automatico.
perché non ci avevo pensato...
la configurazione via webserver ricalca molto la configurazione via telnet.
il problema è che vorrei disabilitare la configurazione via server, per non
permettere a chi userà il programma definitivo (che sarà poi usato
attreaverso una pagina web) di poter andare sulla pagina di gestione della
moxa e cambiare le configurazioni a capocchia...