import java.net.*;
import java.io.*;
import javax.swing.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Com_Window extends JFrame
{
    ObjectInputStream i_stream;
    Socket receive_sock;
    ServerSocket server_sock;

    Com_Window ( int port )
    {
        Container cp;
	setTitle("Message From the Network");
	setSize( 400, 300 );

	cp = getContentPane();
	addWindowListener( new windowHandler() );
	cp.add( new JLabel ( "Messages Received"), "North" );
	DefaultListModel list_model = new DefaultListModel();
	JList message_list = new JList( list_model );
	message_list.setVisibleRowCount (17);
	message_list.setFixedCellWidth( 30 );
	JScrollPane scroll_list = new JScrollPane( message_list ); 
	cp.add( scroll_list, "Center");
	setVisible(true);

	openConnection( port );
	
	try {
	    String temp = (String)i_stream.readObject();
	    while ( temp !=null && !temp.equals("over and out" ) ) {
		list_model.addElement( temp );
		temp = (String)i_stream.readObject();
	    }
	    receive_sock.close();
	} catch (IOException e ) {
	    System.out.println( e.getMessage() );
	} catch ( ClassNotFoundException e ) {
	    System.out.println ( e.getMessage() );
	}
	
    }

    private void openConnection( int port )
    {
	boolean autoFlush = true;

	    try {
		server_sock = new ServerSocket ( port );
		receive_sock = server_sock.accept();
		i_stream = new ObjectInputStream ( receive_sock.getInputStream() );
	    } catch ( UnknownHostException e ) {
		System.out.println( e.getMessage() );
	    } catch ( IOException e ) {
		System.out.println ( e.getMessage() );
	    }

    }

    class windowHandler extends WindowAdapter
    {
	public void windowClosing( WindowEvent e ) 
	{
	    try {
		receive_sock.close();
	    } catch (IOException i ) {
		System.out.println( i.getMessage() );
	    } finally {
		System.exit(0);
	    }
	}
    }
}



public class Receiver
{
    public static void main ( String []args )
    {
	String hostname =null;

	if ( args.length !=1 ) {
	    System.out.println( "Usage: Reciever listen_port ");
	    System.exit(0);
	}

	Com_Window cm = new Com_Window( Integer.parseInt( args[0] ) );
     
    }
}

