Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [JAVA] Socket e InetAddress

    Sto provando a costruire una chat che non funzioni solo in locale, come il 90% di tutte quelle che ho trovato in rete... Inizialmente però la sto provando dalla mia stessa rete su due terminali diversi... Inutile dire che perciò l'IP è lo stesso.

    Il punto è che quando costruisco il Socket lato Client, ho due costruttori a disposizioni che mi potrebbero far comodo:

    Socket(InetAddress address, int port)
    Socket(String host, int port)

    Allora, consideriamo che il secondo costruttore, per quanto almeno riguarda il mio scopo, è utilizzabile solo con la stringa "localhost", e non è troppo utile al mio scopo; sono costretto ad utilizzare il primo costruttore.

    Mi soffermo perciò sulla classe InetAddres, che dovrebbe essere una rappresentazione di un indirizzo IP. Solo che non è inizializzabile, e non contiene metodi che posso utilizzare per crearne un'istanza! Insomma, se io volessi costruire un socket sull'ip 111.222.111.222 ho notato che fare questo:

    Socket ciao = new Socket (111.222.111.222, 9999); ----> E' SBAGLIATO
    e
    InetAddress InAd = new InetAddress (111.222.111.222); ----> E' SBAGLIATO
    Socket ciao = new Socket (InAd, 9999); ----> SAREBBE GIUSTO SE AVESSI InAd COSTRUITO BENE

    Come posso creare un InetAddress con l'IP che voglio io?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Socket e InetAddress

    Originariamente inviato da Gil1688
    Socket(String host, int port)

    Allora, consideriamo che il secondo costruttore, per quanto almeno riguarda il mio scopo, è utilizzabile solo con la stringa "localhost"
    Guarda che nella stringa 'host' puoi specificare sia un nome dell'host (anche su una rete locale, se le macchine possono essere identificabili da un hostname) sia un indirizzo IP in forma "dotted" (xxx.yyy......)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: [JAVA] Socket e InetAddress

    Originariamente inviato da Gil1688
    Mi soffermo perciò sulla classe InetAddres, che dovrebbe essere una rappresentazione di un indirizzo IP. Solo che non è inizializzabile, e non contiene metodi che posso utilizzare per crearne un'istanza!
    InetAddress dispone di metodi statici per l'istanziazione della classe stessa, tra i quali trovi
    codice:
    getByName(String host)

  4. #4
    Eh ma perdonatemi...C''è qualcosa che continuo evidentemente a sbagliare....
    Io ho una rete che ha un IP pubblico che chiamerò A, ed è in forma xxx.yyy.zzz.hhh
    Ho due computer connessi ad essa, uno via cavo ed uno wireless.
    Il pc connesso via cavo ha un IP che chiamerò B; quello connesso in wireless ha un IP che chiamerò C.

    Decido di far fare al pc connesso in wireless la parte del server e lo metto in ascolto su una porta X.
    Decido di far fare al pc connesso via cavo la parte del client e cerco di connettermi al server usando la stessa porta X.

    Solo che mentre per il server mi basta il numero di porta per istanziare un ServerSocket, per il client mi serve anche l'indirizzo IP del server.

    Ebbene li ho provati tutti e tre, ed ho provato la stringa localhost; ho provato il metodo getByName(String host) della classe InetAddress inserendo come stringa l'indirizzo IP (e provandoli a turno tutti e tre, eppure continua a darmi un fastidiosissimo errore!
    Questo, di preciso:

    codice:
    java.net.ConnectException: Connection refused: connect
    Exception occurred during event dispatching:
    java.lang.NullPointerException
            at SocialSharing.ChatSocket.Client.conversazione(Client.java:49)
            at SocialSharing.GUI.Applicazione$Scelta$1.actionPerformed(Applicazione.java:45
            at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
            at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
            at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
            at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
            at java.awt.Component.processMouseEvent(Unknown Source)
            at javax.swing.JComponent.processMouseEvent(Unknown Source)
            at java.awt.Component.processEvent(Unknown Source)
            at java.awt.Container.processEvent(Unknown Source)
            at java.awt.Component.dispatchEventImpl(Unknown Source)
            at java.awt.Container.dispatchEventImpl(Unknown Source)
            at java.awt.Component.dispatchEvent(Unknown Source)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
            at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
            at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
            at java.awt.Container.dispatchEventImpl(Unknown Source)
            at java.awt.Window.dispatchEventImpl(Unknown Source)
            at java.awt.Component.dispatchEvent(Unknown Source)
            at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
            at java.awt.EventQueue.access$000(Unknown Source)
            at java.awt.EventQueue$1.run(Unknown Source)
            at java.awt.EventQueue$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
            at java.awt.EventQueue$2.run(Unknown Source)
            at java.awt.EventQueue$2.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
            at java.awt.EventQueue.dispatchEvent(Unknown Source)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
            at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
            at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
            at java.awt.Dialog$1.run(Unknown Source)
            at java.awt.Dialog$3.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.awt.Dialog.show(Unknown Source)
            at java.awt.Component.show(Unknown Source)
            at java.awt.Component.setVisible(Unknown Source)
            at java.awt.Window.setVisible(Unknown Source)
            at java.awt.Dialog.setVisible(Unknown Source)
            at SocialSharing.GUI.Applicazione$Scelta.<init>(Applicazione.java:484)
            at SocialSharing.GUI.Applicazione$3.actionPerformed(Applicazione.java:209)
            at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
            at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
            at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
            at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
            at java.awt.Component.processMouseEvent(Unknown Source)
            at javax.swing.JComponent.processMouseEvent(Unknown Source)
            at java.awt.Component.processEvent(Unknown Source)
            at java.awt.Container.processEvent(Unknown Source)
            at java.awt.Component.dispatchEventImpl(Unknown Source)
            at java.awt.Container.dispatchEventImpl(Unknown Source)
            at java.awt.Component.dispatchEvent(Unknown Source)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
            at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
            at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
            at java.awt.Container.dispatchEventImpl(Unknown Source)
            at java.awt.Window.dispatchEventImpl(Unknown Source)
            at java.awt.Component.dispatchEvent(Unknown Source)
            at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
            at java.awt.EventQueue.access$000(Unknown Source)
            at java.awt.EventQueue$1.run(Unknown Source)
            at java.awt.EventQueue$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
            at java.awt.EventQueue$2.run(Unknown Source)
            at java.awt.EventQueue$2.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
            at java.awt.EventQueue.dispatchEvent(Unknown Source)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
            at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
            at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
            at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
            at java.awt.EventDispatchThread.run(Unknown Source)
    Allora, come dovrei fare?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Gil1688
    Decido di far fare al pc connesso in wireless la parte del server e lo metto in ascolto su una porta X.
    Decido di far fare al pc connesso via cavo la parte del client e cerco di connettermi al server usando la stessa porta X.

    Allora, come dovrei fare?
    Ci sono firewall di mezzo (parlo anche di quelli software nei PC) che bloccano le porte? Anche questo conta.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    No sò... Dovrei fare un controllo, ho ubuntu sul pc-server e non sò adesso francamente dove andare a controllare... Tralaltro non c'è un modo per far si che perlomeno il firewall mi chiedesse se ho intenzione di considerare il programma come affidabile e perciò consentirgli di operare?

    Tecnicamente il problema me lo genera il firewall del client o quello del server?

    Ed infine, per creare una chat che funzioni tra postazioni NON della stessa rete, ho effettuato le giuste scelte progettuali utilizzando le ServerSocket e le Socket con IP e porta?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Gil1688
    No sò... Dovrei fare un controllo, ho ubuntu sul pc-server e non sò adesso francamente dove andare a controllare... Tralaltro non c'è un modo per far si che perlomeno il firewall mi chiedesse se ho intenzione di considerare il programma come affidabile e perciò consentirgli di operare?
    Dipende dal firewall, software chiaramente. Una volta su Windows usavo ZoneAlarm ma era sovente lì che mi scocciava chiedendomi se permettere una connessione, un'altra, ecc... che alla fine l'avevo tolto (anche per altri motivi).

    Originariamente inviato da Gil1688
    Tecnicamente il problema me lo genera il firewall del client o quello del server?
    Di norma le questioni di sicurezza riguardano il non far "entrare" ... ad uscire normalmente non ci dovrebbero essere problemi.

    Originariamente inviato da Gil1688
    Ed infine, per creare una chat che funzioni tra postazioni NON della stessa rete, ho effettuato le giuste scelte progettuali utilizzando le ServerSocket e le Socket con IP e porta?
    Quello che hai fatto è corretto e non cambierebbe (se non host/porte) su una rete più grande (es. internet).
    Ma ci sarebbero altre questioni da considerare, tra cui appunto firewall sw/hw, router e pure gli ISP (i provider).
    Ne avevo parlato in questa discussione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Ho letto la discussione che mi hai segnalato, e a questo punto mi sono fatto l'idea che realizzare quello che vorrei sia un pò complicato...
    Perchè ho aperto la porta del mio server tramite il suo firewall, ma il problema persiste; perciò sono giunto alla conclusione che il mio problema non sia di programmazione, ma di rete e dovrei contattare il mio provider per sistemare la questione filtri...

    Solo che la mia intenzione per permettere una chat con stanze private era quella di rendere tutti gli utenti sia client e sia server, così da collegarsi gli uni agli altri tramite gli appositi socket... Ma non posso controllare le reti di tutti gli utenti!

    Allora vorrei tentare un'altra strategia... Potrei creare una chat rendendo server solamente UNA macchina, la mia, e client tutte le altre? Così facendo tutte si collegherebbero alla mia; ma poi come gestisco le comunicazioni tra di loro? (client to client)

    Inoltre, per quanto io non spenga nemmeno un istante il mio computer per svariati mesi di fila, credo sia inappropriato dare ai client il riferimento del suo IP in quanto è soggetto a cambiare per dinamicità, no? Ho un nome associato che rimanga sempre statico?

    Come posso sistemare queste cose?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Gil1688
    ho aperto la porta del mio server tramite il suo firewall, ma il problema persiste
    Se pensi/sai di aver fatto tutto quello che era necessario per aprire la porta X sui sistemi sotto il tuo controllo, puoi verificare se funziona o da un'altra macchina su internet (es. da un amico) oppure usi un servizio online di port scanning (basta cercare in rete).
    Chiaramente la tua applicazione "server" deve essere attiva.

    Originariamente inviato da Gil1688
    perciò sono giunto alla conclusione che il mio problema non sia di programmazione, ma di rete
    A questi livelli sono sempre questioni di networking ... non di programmazione.

    Originariamente inviato da Gil1688
    dovrei contattare il mio provider per sistemare la questione filtri...
    I provider hanno la facoltà di applicare filtri/blocchi su determinate porte, in genere per questioni di sicurezza. In passato è successo che i provider bloccassero certe porte per evitare di esporre i PC (non aggiornati o non ben protetti) degli utenti a exploit da parte di malintenzionati.
    Ma i provider non è che si divertono a bloccare porte a caso o ad esempio tutte. E comunque al massimo potrebbero dirti le porte che bloccano ma non cambiano di certo le loro regole solo perché l'ha chiesto un utente.

    Originariamente inviato da Gil1688
    Solo che la mia intenzione per permettere una chat con stanze private era quella di rendere tutti gli utenti sia client e sia server, così da collegarsi gli uni agli altri tramite gli appositi socket... Ma non posso controllare le reti di tutti gli utenti!
    Tu no, ovvio. Dovrebbero essere gli utenti della tua chat che si dovrebbero preoccupare ognuno della propria parte di rete. Ammesso che siano capaci o abbiano voglia di farlo (per una chat) .... il punto sarebbe solo questo.

    Originariamente inviato da Gil1688
    Allora vorrei tentare un'altra strategia... Potrei creare una chat rendendo server solamente UNA macchina, la mia, e client tutte le altre?
    Sarebbe una soluzione più pulita e meno critica (e anche "tipica").

    Originariamente inviato da Gil1688
    Così facendo tutte si collegherebbero alla mia; ma poi come gestisco le comunicazioni tra di loro? (client to client)
    Tra i client direttamente no. Sarebbe tutto "mediato" dal tuo server. Dovresti sfruttare il multi-threading, usare strutture dati apposite (es. code) per fare in modo da dispacciare un messaggio ricevuto da un socket X a tutti gli altri socket.
    Sì può fare benissimo.

    Originariamente inviato da Gil1688
    Inoltre, per quanto io non spenga nemmeno un istante il mio computer per svariati mesi di fila, credo sia inappropriato dare ai client il riferimento del suo IP in quanto è soggetto a cambiare per dinamicità, no? Ho un nome associato che rimanga sempre statico?
    Se la tua è una connessione ad internet "home" (casalinga) tipicamente l'assegnamento del IP è "dinamico". E quindi chiaramente l'indirizzo può cambiare. In questi casi si può sfruttare un servizio di Dynamic-DNS (DDNS).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Attenzione, strano ma vero, sembra che contro ogni previsione funzioni.
    Ho risolto i vari problemi tecnicamente senza sapere il motivo per cui si presentassero però...

    La prima cosa che ho fatto è stata stabilire che l'errore che mi sollevava era una ConnectException. Ho controllato i numeri di porta, ho disabilitato il firewall del provider, eppure continuava a darlo... Perciò rimaneva la causa che a priori aveva erroneamente scartato: l'indirizzo IP sbagliato... In realtà NON era affatto sbagliato, ma per chissà quale motivo in Ubuntu veniva associato un IP COMPLETAMENTE diverso da quello assegnato in Windows... E non veniva mai trovato... Perciò il server rimaneva in attesa all'infinito di qualcuno, ma non c'era client che riuscisse a contattarlo...

    Perciò ho spostato il server su una macchina Windows e... funziona.
    Adesso l'ho provato in Lan e in WLan e va che è una meraviglia; rimane da provarlo in Man o in Wan...

    Se non ti dispiace ti tengo aggiornato sugli sviluppi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.