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();
	}
}