|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2010
Messaggi: 60
|
[Java] Socket e ip
Salve a tutti, sto riscontrando un problema nella creazione di un programma
![]() Il programma ha per base una chat di solo testo, gestita in maniera alquanto semplice. Ogni Postazione fa sia da client che da server per l'invio e ricezione(sempre in ascolto) di nuovi messaggi. Il mio problema è il seguente: La connessione avviene Ip - Ip con una porta scelta da me. Il programma funziona correttamente in locale, e in remoto con l'aiuto di un qualsiasi programma di reti remote come hamachi. Nel momento in cui cerco di farli comunicare direttamente attraverso gli ip... non c'è risposta. Non penso sia un problema di firewall in quanto l'ho testato anche disattivandolo. Molto probabilmente sbaglio io qualcosa concettualmente.. help ![]() (Riassumendo, il programma è scritto correttamente in quanto localmente e in remoto attraverso gli ip di hamachi invio e ricevo senza problemi... mentre senza hamachi, con gli ip veri e propri... niente ![]() grazie in anticipo |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Dipende che tipo di ip parli.. se sei in una lan dovrebbe comunque funzionare, ma se invece cerchi di contattare un host fuori dalla tua lan la situazione diventa più complicata.
Com'è configurata la tua rete (routers, ecc... )e quella della macchina che cerchi di contattare? |
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Mar 2010
Messaggi: 60
|
Quote:
Le due macchine comunicanti dovrebbero essere due pc comunissimi. Quindi si presume che ognuno di loro sia collegato ad un router. PC#1 - router - internet - router - PC#2 In che modo dovrei instaurare una connessione funzionante? Come posso far avvenire uno scambio dati? |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quando un pc è dietro un router allora il pc è "nattato". Hai quindi 2 alternative
1) imposti il port forwarding del router in modo che le connessioni TCP o UDP su una certa porta vengano inoltrate al pc dove hai la chat. Metodo bruttissimo e poco pratico 2) ti crei un semplice server che fa solo da server. Questo lo metti dove ti pare avendo sempre i dovuti accorgimenti dei computer nattati (quindi port forwarding se sei dietro un router). I client ti fanno solo da client e si connettono al server e la loro comunicazione avviene attraverso di esso. quindi PC1 --> router --> ( internet - server - internet ) <-- router <-- PC2 non so se sono riuscito a spiegarmi bene |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jul 2011
Messaggi: 246
|
Come presagito da clockover, la tua situazione è più complessa perchè i due pc, essendo collegati tramite router (che fa da NAT), non sono raggiungibili dall'esterno della rete di cui fanno parte. I due pc, per parlarsi in internet direttamente devono avere degli ip pubblici che, nel tuo caso, hanno solo i router. Quindi, visto che mi pare di capire che entrambi gli host devono fungere da server, hai due possibilità:
- entrambi i PC hanno IP pubblici (strada non molto percorribile); - entrambi i router vengono configurati per fare port-forwarding della porta su cui la tua applicazione lavora. EDIT: ops, scrivevamo contemporaneamente :-P
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto. CONCLUSO POSITIVAMENTE CON: oldfield |
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Mar 2010
Messaggi: 60
|
Quote:
Il fatto è che il tipo di programma creato, volevo farlo funzionare sia da client che da server. Ma che segua la tua o questa strada c'è sempre il problema della connessione "nattata". Programmo in java da relativamente poco... e possibilmente mi mancano le basi per poter implementare questo passaggio. Mi servirebbe qualche esempio di codice o di indicazioni sui comandi da usare ![]() |
|
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Mar 2010
Messaggi: 60
|
Quote:
![]() Da quel che ho capito dovrei implementare il meccanismo che permetta di inoltrare al pc in questione il messaggio, passando dal suo router e instradandolo correttamente.... Ma come ho già risposto.. mi mancano le basi per questo tipo di operazione.. qualche consiglio? ![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Se capisci questo semplice esempio sono sicuro che sarà molto più semplice di come l'hai implementata.
1) Server il server sta dove ti pare, anche dietro un router quindi nattato. Accetta connessioni dall'esterno mediante dei thread 2) Client questi possono stare anche sottoterra, basta che c'è una rete. Ognuno ha un identificatore univoco. Ad esempio come messenger sono identificati con un indirizzo mail il client si connette al server, il quale vi rimane in contatto mediante una connessione TCP/IP e sta li in attesa l'altro client fa la stessa cosa quando io scrivo un messaggio a te il messaggio passa attraverso il server il quale ti inoltra il messaggio. E questa è la tua chat funzionante ovunque, basta semplicemente sapere l'indirizzo del server e solo del server. Se vuoi rimanere come stai devi operare su entrambi i routers. Entri nella pagina di configurazione del router e trovi la pagina relativa al port forwarding (inoltro di porta). Scegli il tipo di connessione (TCP o UDP), il numero di porta con la quale dialoghi e l'indirizzo ip del computer. Questa operazione va fatta su entrambi i routers non dimenticare. |
![]() |
![]() |
![]() |
#9 | |
Member
Iscritto dal: Mar 2010
Messaggi: 60
|
Quote:
Il server lo posiziono nel mio pc, ergo nattato a causa della presenza del router. Un client esterno (in questo caso l'altro pc) per poter accedere al mio server non avrà lo stesso problema di connessione? Il mio problema è solo questo.. fare in modo che il messaggio parta da un pc e arrivi ad un altro (che arrivi ad un server o ad un client-server) ovvero superare il problema del nat ![]() edit: da quel che ho capito, pensandoci... il problema non è legato al java o ad una qualche libreria con comandi da utilizzare, bensì ad una configurazione del router... no? Ultima modifica di UpdatedMind : 24-12-2011 alle 15:23. |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Si hai lo stesso problema (lo avevo già menzionato infatti) ma lo risolvi per il server con gli stessi accorgimenti per i computer nattati del mio ultimo post. Cioè abilitando il port forwarding per il server, però solo per il server. I client non avranno di questo problema
|
![]() |
![]() |
![]() |
#11 | |
Member
Iscritto dal: Mar 2010
Messaggi: 60
|
Quote:
![]() Ergo, se volessi realizzare questa piccola chat dovrei comunque affidarmi necessariamente ad un programma che generi una rete locale come hamachi... (in quel caso tutto funziona correttamente...) che evidentemente bypassa il problema. A meno che non decidessi di creare un server e di modificare le impostazioni del mio router. Tutti necessiterebbero comunque del mio server attivo... ma non avrebbero localmente problemi di settaggi. Non posso creare con facilità un'operazione di server-client se non con questa "spesa". Correggimi se sbaglio. Grazie ancora per l'aiuto. ![]() edit: BUON NATALE XD Ultima modifica di UpdatedMind : 24-12-2011 alle 15:43. |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
In parole povere è come hai detto tu si
![]() Buone Feste ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:32.