Java tutorial
//The 3 classes are a a tcp client, tcp server, and a Serializable payload object which is sent from the server to the client. //The 3 classes are meant to work together. //--George //TcpClient.java ------------------------------------------------------------------------------------------------------------------------- import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.net.Socket; import java.net.UnknownHostException; /** * TcpClient.java * * This class works in conjunction with TcpServer.java and TcpPayload.java * * This client test class connects to server class TcpServer, and in response, * it receives a serialized an instance of TcpPayload. */ public class TcpClient { public final static String SERVER_HOSTNAME = "gsoler.arc.nasa.gov"; public final static int COMM_PORT = 5050; // socket port for client comms private Socket socket; private TcpPayload payload; /** Default constructor. */ public TcpClient() { try { this.socket = new Socket(SERVER_HOSTNAME, COMM_PORT); InputStream iStream = this.socket.getInputStream(); ObjectInputStream oiStream = new ObjectInputStream(iStream); this.payload = (TcpPayload) oiStream.readObject(); } catch (UnknownHostException uhe) { System.out.println("Don't know about host: " + SERVER_HOSTNAME); System.exit(1); } catch (IOException ioe) { System.out.println("Couldn't get I/O for the connection to: " + SERVER_HOSTNAME + ":" + COMM_PORT); System.exit(1); } catch(ClassNotFoundException cne) { System.out.println("Wanted class TcpPayload, but got class " + cne); } System.out.println("Received payload:"); System.out.println(this.payload.toString()); } /** * Run this class as an application. */ public static void main(String[] args) { TcpClient tcpclient = new TcpClient(); } } TcpServer.java------------------------------------------------------------------------------------------------------------------------- import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; /** * This class works in conjunction with TcpClient.java and TcpPayload.java * * This server test class opens a socket on localhost and waits for a client * to connect. When a client connects, this server serializes an instance of * TcpPayload and sends it to the client. */ public class TcpServer { public final static int COMM_PORT = 5050; // socket port for client comms private ServerSocket serverSocket; private InetSocketAddress inboundAddr; private TcpPayload payload; /** Default constructor. */ public TcpServer() { this.payload = new TcpPayload(); initServerSocket(); try { while (true) { // listen for and accept a client connection to serverSocket Socket sock = this.serverSocket.accept(); OutputStream oStream = sock.getOutputStream(); ObjectOutputStream ooStream = new ObjectOutputStream(oStream); ooStream.writeObject(this.payload); // send serilized payload ooStream.close(); Thread.sleep(1000); } } catch (SecurityException se) { System.err.println("Unable to get host address due to security."); System.err.println(se.toString()); System.exit(1); } catch (IOException ioe) { System.err.println("Unable to read data from an open socket."); System.err.println(ioe.toString()); System.exit(1); } catch (InterruptedException ie) { } // Thread sleep interrupted finally { try { this.serverSocket.close(); } catch (IOException ioe) { System.err.println("Unable to close an open socket."); System.err.println(ioe.toString()); System.exit(1); } } } /** Initialize a server socket for communicating with the client. */ private void initServerSocket() { this.inboundAddr = new InetSocketAddress(COMM_PORT); try { this.serverSocket = new java.net.ServerSocket(COMM_PORT); assert this.serverSocket.isBound(); if (this.serverSocket.isBound()) { System.out.println("SERVER inbound data port " + this.serverSocket.getLocalPort() + " is ready and waiting for client to connect..."); } } catch (SocketException se) { System.err.println("Unable to create socket."); System.err.println(se.toString()); System.exit(1); } catch (IOException ioe) { System.err.println("Unable to read data from an open socket."); System.err.println(ioe.toString()); System.exit(1); } } /** * Run this class as an application. */ public static void main(String[] args) { TcpServer tcpServer = new TcpServer(); } } TcpPayload.java------------------------------------------------------------------------------------------------------------------------- import java.io.Serializable; /** * This class works in conjunction with TcpClient.java and TcpServer.java * * This class contains test data representing a 'payload' that is sent from * TcpServer to TcpClient. An object of this class is meant to be serialized by * the server before being sent to the client. An object of this class is meant * to be deserialized by the client after being received. */ public class TcpPayload implements Serializable { // serial version UID was generated with serialver command static final long serialVersionUID = -50077493051991107L; private int int1; private transient int int2; // transient members are not serialized private float float1; private double double1; private short short1; private String str1; private long long1; private char char1; /** Default constructor. */ public TcpPayload() { this.int1 = 123; this.int2 = 456; this.float1 = -90.05f; this.double1 = 55.055; this.short1 = 59; this.str1 = "I am a String payload."; this.long1 = -23895901L; this.char1 = 'x'; } /** Get a String representation of this class. */ public String toString() { StringBuilder strB = new StringBuilder(); strB.append("int1=" + this.int1); strB.append(" int2=" + this.int2); strB.append(" float1=" + this.float1); strB.append(" double1=" + this.double1); strB.append(" short1=" + this.short1); strB.append(" str1=" + this.str1); strB.append(" long1=" + this.long1); strB.append(" char1=" + this.char1); return strB.toString(); } }