Skip to content
Snippets Groups Projects
ThomersonAssignment1.java 5.09 KiB
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package MV3500Cohort2018JulySeptember.homework1;
import java.io.*;
import java.net.*;

/**
 * =======MODIFICATIONS==============
 * 
 * (A) Examples 1 and 2 were combined into this document manually and the comments on 
 * each line of code were modified so I could understand what each line of code was
 * responsible for.
 * 
 * (B) The NetBean outputs were changed to show each step of the process and clearly
 * depict exactly what is going on in the code.
 * 
 * (C) The while loop will stop the program after 5 connections.
 */


/**
 * The simplest possible TCP network program. It listens for
 * a connection, from telnet (telnet localhost 2317) or a program
 * you write, which we will do later. Right now the TcpExample simply
 * writes a string in response to a connection. 
 * 
 * Testing the running server program from telnet looks like this:
 * 
 * it154916:projects mcgredo$ telnet localhost 2317
 * Trying ::1...
 * Connected to localhost.
 * Escape character is '^]'.
 * This was written by the server
 * Connection closed by foreign host.
 * 
 * Notice that "This was written by the server" matches 
 * what is written by the code below, over the output stream.
 * 
 * After this first connection the program below drops out
 * the bottom of the program, and does not repeat itself.
 * The program exits.
 * 
 * @author courtneythomerson
 */
public class ThomersonAssignment1
{
    /**
     * Default constructor to silence javadoc warning
     * @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
     */
    public ThomersonAssignment1 ()
    {
        // default initializations
    }
    /** run the program
     * @param args command-line arguments, string parameters (unused) */
    public static void main(String[] args) {
        
        try
        {
            // NETBEANS IS THE SERVER.
            // Create a new ServerSocket with the input 2317 in the constructor.
            // SERVER SOCKET is the socket the client will connect to
            // ServerSocket needs to be made only once
            ServerSocket serverSocket = new ServerSocket(2317);
            
            //Count how many connections have been made
            int connectionCount = 0;
            
            while(connectionCount < 5){
                // The Socket object represents the connection between
                // the server and client, including a full duplex
                // connection (.accept() is a blocking method)
                Socket clientConnection = serverSocket.accept();
              
                //Once a client has been excepted iterate the connectionCount
                connectionCount += 1;
                
                // Use Java io classes to write text (as opposed to
                // unknown bytes of some sort) to the client
                OutputStream os = clientConnection.getOutputStream();
                PrintStream ps = new PrintStream(os);
            
                //Confirm the connection on both sides through NetBeans
                ps.println("This is the server (NetBeans) writting to the client (Terminal)"); // to remote client
                System.out.println("This is the server (NetBeans) confirming the connection with the client (Terminal)"); // to server console
            
                //NetBeans tells the client which connection number they are
                ps.println("This connection was number " + connectionCount );
                
                //Get information about the connection
                //SERVER IP Address
                InetAddress localAddress = clientConnection.getLocalAddress();
                //SERVER Port
                int localPort = clientConnection.getLocalPort();
                
                //CLIENT IP Address
                InetAddress remoteAddress = clientConnection.getInetAddress();
                //CLIENT Port
                int remotePort = clientConnection.getPort();
                
                //Have the server (NetBeans) show all the collected information
                System.out.println("\nSocket Pair:\n\t"
                        + "Server: IP - " + localAddress.toString() +  ", Port - " + localPort + "\n\t" 
                        + "Client: IP - " + remoteAddress.toString() + ", Port - " + remotePort);
                
                System.out.println("\nConnection: " + connectionCount + "\n");
                
                // "flush()" in important in that it forces a write 
                // across what is in fact a slow connection
                ps.flush();
            
                clientConnection.close();
                System.out.println("The last connection has been closed.");
            }
            
            System.out.println("\nFive connections have been made - End of program.");
        }
        catch(Exception e)
        {
            System.out.println("problem with networking: " + e);
        }
    }
    
}