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

    ConnectException: Connection timed out: connect

    Salve. Allora, ho un programma Server e un programma Client che possono mettersi in comunicazione. Ho provato a collegarli in diversi modi

    1) Sul computer locale (localhost)
    2) Tra 2 computer
    3) Inserendo il server su un hosting (www.lenostreidee.net)

    I primi due modi riescono, ma l'ultimo invece no. Con altervista ho altri problemi e quindi non posso provare... quando tento di collegare il client dal mio computer al server che si trova sul mio hosting www.lenostreidee.net, viene lanciata una ConnectException e quindi la connessione non avviene. Perchè? Come potrei risolvere?

    ServerApplet.java
    codice:
    import javax.swing.JApplet;
    import javax.swing.JButton;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class ServerApplet extends JApplet
    {
    	private JButton button;
    	
    	public void init()
    	{
    		button = new JButton ("Start Server");
    		button.addActionListener
    		(
    			new ActionListener()
    			{
    				public void actionPerformed (ActionEvent event)
    				{
    					Thread serverThread = new Thread
    					(
    						new Runnable()
    						{
    							public void run()
    							{
    								Server server = new Server();
    								server.runServer();
    							}
    						}
    					);
    					serverThread.start();
    				}
    			}
    		);
    		
    		add (button);
    	}
    }
    Server.java
    codice:
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.SocketException;
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowListener;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    
    public class Server extends JFrame
    {
    	private JTextField enterField;
    	private JTextArea displayArea;
    	private ObjectOutputStream output;
    	private ObjectInputStream input;
    	private ServerSocket server;
    	private Socket connection;
    	private int counter = 1;
    	private boolean closingFlag = false;
    	
    	public Server()
    	{
    		super ("Server");
    		setSize (300, 150);
    		setLocationRelativeTo (null);
    		setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE);
    		
    		enterField = new JTextField();
    		enterField.setEditable (false);
    		enterField.addActionListener
    		(
    			new ActionListener()
    			{
    				public void actionPerformed (ActionEvent event)
    				{
    					sendData (event.getActionCommand());
    					enterField.setText ("");
    				}
    			}
    		);
    		
    		add (enterField, BorderLayout.NORTH);
    		
    		displayArea = new JTextArea();
    		add (new JScrollPane (displayArea), BorderLayout.CENTER);
    		
    		addWindowListener
    		(
    			new WindowAdapter()
    			{
    				public void windowClosing (WindowEvent event)
    				{
    					closingFlag = true;
    					closeConnection();
    					dispose();
    				}
    			}
    		);
    		
    		setVisible (true);
    	}
    	
    	public void runServer()
    	{
    		try
    		{
    			server = new ServerSocket (12345, 100);
    			
    			while (true)
    			{
    				try
    				{
    					waitForConnection();
    					getStreams();
    					processConnection();
    				}
    				catch (EOFException exception)
    				{
    					displayMessage ("\nServer terminated connection");
    				}
    				finally
    				{
    					closeConnection();
    					counter++;
    				}
    			}
    		}
    		catch (SocketException exception){}
    		catch (IOException exception)
    		{
    			exception.printStackTrace();
    		}
    	}
    	
    	private void waitForConnection() throws IOException
    	{
    		displayMessage ("Waiting for connection\n");
    		connection = server.accept();
    		
    		displayMessage ("Connection " + counter + " received from: " + connection.getInetAddress().getHostName());
    	}
    	
    	private void getStreams() throws IOException
    	{
    		output = new ObjectOutputStream (connection.getOutputStream());
    		output.flush();
    		
    		input = new ObjectInputStream (connection.getInputStream());
    		
    		displayMessage ("\nGot I/O streams\n");
    	}
    	
    	private void processConnection() throws IOException
    	{
    		String message = "Connection successful";
    		sendData (message);
    		
    		setTextFieldEditable (true);
    		
    		do
    		{
    			try
    			{
    				message = (String) input.readObject();
    				displayMessage ("\n" + message);
    			}
    			catch (ClassNotFoundException exception)
    			{
    				displayMessage ("\nUnknown object type received");
    			}
    		} while (!message.equals ("CLIENT>>> TERMINATE"));
    	}
    	
    	private void closeConnection()
    	{
    		displayMessage ("\nTerminating connection\n");
    		setTextFieldEditable (false);
    		
    		try
    		{
    			if (output != null)
    				output.close();
    			if (input != null)
    				input.close();
    			if (connection != null)
    				connection.close();
    			if (server != null && closingFlag)
    				server.close();
    		}
    		catch (IOException exception)
    		{
    			exception.printStackTrace();
    		}
    	}
    	
    	private void sendData (String message)
    	{
    		try
    		{
    			output.writeObject ("SERVER>>> " + message);
    			output.flush();
    			displayMessage ("\nSERVER>>> " + message);
    		}
    		catch (IOException exception)
    		{
    			displayArea.append ("\nError writing object");
    		}
    	}
    	
    	private void displayMessage (final String messageToDisplay)
    	{
    		SwingUtilities.invokeLater
    		(
    			new Runnable()
    			{
    				public void run()
    				{
    					displayArea.append (messageToDisplay);
    				}
    			}
    		);
    	}
    	
    	private void setTextFieldEditable (final boolean editable)
    	{
    		SwingUtilities.invokeLater
    		(
    			new Runnable()
    			{
    				public void run()
    				{
    					enterField.setEditable (editable);
    				}
    			}
    		);
    	}
    }
    Client.java
    codice:
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.awt.BorderLayout;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    
    public class Client extends JFrame
    {
    	private JTextField enterField;
    	private JTextArea displayArea;
    	private ObjectOutputStream output;
    	private ObjectInputStream input;
    	private String message = "";
    	private String chatServer;
    	private Socket client;
    	
    	public Client (String host)
    	{
    		super ("Client");
    		setSize (300, 150);
    		setLocationRelativeTo (null);
    		setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    		
    		chatServer = host;
    		
    		enterField = new JTextField();
    		enterField.setEditable (false);
    		enterField.addActionListener
    		(
    			new ActionListener()
    			{
    				public void actionPerformed (ActionEvent event)
    				{
    					sendData (event.getActionCommand());
    					enterField.setText ("");
    				}
    			}
    		);
    		
    		add (enterField, BorderLayout.NORTH);
    		
    		displayArea = new JTextArea();
    		add (new JScrollPane (displayArea));
    		
    		setVisible (true);
    	}
    	
    	public void runClient()
    	{
    		try
    		{
    			connectToServer();
    			getStreams();
    			processConnection();
    		}
    		catch (EOFException exception)
    		{
    			displayMessage ("\nClient terminated connection");
    		}
    		catch (IOException exception)
    		{
    			exception.printStackTrace();
    		}
    		finally
    		{
    			closeConnection();
    		}
    	}
    	
    	private void connectToServer() throws IOException
    	{
    		displayMessage ("Attempting connection\n");
    		
    		client = new Socket (InetAddress.getByName (chatServer), 12345);
    		
    		displayMessage ("Connected to: " + client.getInetAddress().getHostName());
    	}
    	
    	private void getStreams() throws IOException
    	{
    		output = new ObjectOutputStream (client.getOutputStream());
    		output.flush();
    		
    		input = new ObjectInputStream (client.getInputStream());
    		
    		displayMessage ("\nGot I/O streams\n");
    	}
    	
    	private void processConnection() throws IOException
    	{
    		setTextFieldEditable (true);
    		
    		do
    		{
    			try
    			{
    				message = (String) input.readObject();
    				displayMessage ("\n" + message);
    			}
    			catch (ClassNotFoundException exception)
    			{
    				displayMessage ("\nUnknown object type received");
    			}
    		} while (!message.equals ("SERVER>>> TERMINATE"));
    	}
    	
    	private void closeConnection()
    	{
    		displayMessage ("\nClosing connection");
    		setTextFieldEditable (false);
    		
    		try
    		{
    			output.close();
    			input.close();
    			client.close();
    		}
    		catch (IOException exception)
    		{
    			exception.printStackTrace();
    		}
    	}
    	
    	private void sendData (String message)
    	{
    		try
    		{
    			output.writeObject ("CLIENT>>> " + message);
    			output.flush();
    			displayMessage ("\nCLIENT>>> " + message);
    		}
    		catch (IOException exception)
    		{
    			displayArea.append ("\nError writing object");
    		}
    	}
    	
    	private void displayMessage (final String messageToDisplay)
    	{
    		SwingUtilities.invokeLater
    		(
    			new Runnable()
    			{
    				public void run()
    				{
    					displayArea.append (messageToDisplay);
    				}
    			}
    		);
    	}
    	
    	private void setTextFieldEditable (final boolean editable)
    	{
    		SwingUtilities.invokeLater
    		(
    			new Runnable()
    			{
    				public void run()
    				{
    					enterField.setEditable (editable);
    				}
    			}
    		);
    	}
    }
    ClientTest.java
    codice:
    public class ClientTest
    {
    	public static void main (String[] args)
    	{
    		Client application;
    		
    		if (args.length == 0)
    			application = new Client ("127.0.0.1");
    		else
    			application = new Client (args[0]);
    		
    		application.runClient();
    	}
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    La porta 12345 è aperta sul tuo hosting?

    Perchè se tale porta non è aperta è il server ad andare in errore (e qui dovresti controllare su un eventuale log sul server) e quando il client prova a collegarsi, non riceve alcuna risposta e va in timeout...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Originariamente inviato da LeleFT
    La porta 12345 è aperta sul tuo hosting?

    Perchè se tale porta non è aperta è il server ad andare in errore (e qui dovresti controllare su un eventuale log sul server) e quando il client prova a collegarsi, non riceve alcuna risposta e va in timeout...


    Ciao.

    Al dire il vero non so quali porte dell'hosting sono abilitate e non so come verificarle...

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da Dreamer89
    Al dire il vero non so quali porte dell'hosting sono abilitate e non so come verificarle...
    Questa informazione te la può dare solo il tuo provider di servizio hosting... e molto probabilmente la risposta sarà un NO: nessun servizio di hosting apre porte "personalizzate" (e tra queste di sicuro non quelle sopra il 1000) se non su richiesta (se è possibile effettuare tali richieste). Solitamente solo i servizi di hosting ad hoc permettono l'apertura di porte personalizzate (e molto spesso lo fanno dietro compenso, se non si è in possesso di contratti particolari).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Originariamente inviato da LeleFT
    Questa informazione te la può dare solo il tuo provider di servizio hosting... e molto probabilmente la risposta sarà un NO: nessun servizio di hosting apre porte "personalizzate" (e tra queste di sicuro non quelle sopra il 1000) se non su richiesta (se è possibile effettuare tali richieste). Solitamente solo i servizi di hosting ad hoc permettono l'apertura di porte personalizzate (e molto spesso lo fanno dietro compenso, se non si è in possesso di contratti particolari).


    Ciao.
    Mmmhhh... ho provato su altervista e mi da un'eccezione leggermente diversa: ConnectException: Connection refused.

    Se è così complicato connettersi attraverso una porta, in che modo potrei creare una chat che funzioni (da server) su qualsiasi hosting? Utilizzare i database non mi sembra appropriato, e utilizzare un file condiviso mi sembra sia un pò lento... o no? Qualche consiglio?

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da Dreamer89
    Mmmhhh... ho provato su altervista e mi da un'eccezione leggermente diversa: ConnectException: Connection refused.

    Se è così complicato connettersi attraverso una porta, in che modo potrei creare una chat che funzioni (da server) su qualsiasi hosting? Utilizzare i database non mi sembra appropriato, e utilizzare un file condiviso mi sembra sia un pò lento... o no? Qualche consiglio?
    Ma le chat non funzionano su qualsiasi hosting... solo dove è possibile intervenire su questi parametri (generalmente, infatti, esse risiedono solo dove è presente un servizio di housing: il cliente ha a disposizione completa la macchina, quindi può avviare tutte le applicazioni che vuole e ha a disposizione contratti che gli permettono di richiedere l'apertura di determinate porte).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7

  8. #8
    Considerando il fatto che la connessione tra due computer attraverso questo sistema sia molto semplice poichè tutte le porte sono disponibili, potrei fare in modo che, il primo utente che avvia una chat fa anche da server. Ci sarebbero conseguenze negative, tipo rallentamento delle trasmissioni o altro?

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da Dreamer89
    Considerando il fatto che la connessione tra due computer attraverso questo sistema sia molto semplice poichè tutte le porte sono disponibili, potrei fare in modo che, il primo utente che avvia una chat fa anche da server. Ci sarebbero conseguenze negative, tipo rallentamento delle trasmissioni o altro?
    Beh... direi che è una pratica da evitare:

    1) Come fai a capire chi è il primo client?
    2) Come fanno gli altri client a sapere qual è l'indirizzo del server (ammesso che il client che fa da server ne abbia uno pubblico)?
    3) La velocità della chat dipenderebbe dal client che vi si collega...

    E mi fermo qui...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Originariamente inviato da LeleFT
    Beh... direi che è una pratica da evitare:

    1) Come fai a capire chi è il primo client?
    2) Come fanno gli altri client a sapere qual è l'indirizzo del server (ammesso che il client che fa da server ne abbia uno pubblico)?
    3) La velocità della chat dipenderebbe dal client che vi si collega...

    E mi fermo qui...


    Ciao.
    I problemi non sono questi, che sono facilmente risolvibili.
    Solo dopo aver scritto il post ho riflettuto che è una cosa impossibile dato che, se poi il primo client chiude la connessione, automaticamente tutti gli altri cadrebbero poichè col primo client cade anche il server... devo trovare un altro metodo

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.