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
Server.javacodice: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); } }
Client.javacodice: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); } } ); } }
ClientTest.javacodice: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); } } ); } }
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(); } }

Rispondi quotando

