Skip to content
Snippets Groups Projects
Commit 591560a0 authored by Brutzman, Don's avatar Brutzman, Don
Browse files
parents dade4c73 ca992fb4
No related branches found
No related tags found
No related merge requests found
My Assignment #1
package MV3500Cohort2024JulySeptember.homework1.Yu;
import src.TcpExamples.*;
import java.io.*;
import java.net.*;
/**
* <p>
* The simplest possible TCP network program, opening a socket and waiting for a reply.
* It listens for any socket connection response, either from telnet (telnet localhost 2317)
* or another program that you write (which we will do later).
* Once a socket connection is established, TcpExample1Telnet simply
* writes a string in response to that connection and finishes, exiting.
*
* <p>
* As an alternative to running the Windows (or other operating system) console,
* you can instead run the NetBeans terminal window. If you are on Windows,
* NetBeans is looking for Cgwin installation (for Unix-like compatibility)
* with details at <a href="https://savage.nps.edu/Savage/developers.html#Cygwin" target="blank">Savage Developers Guide: Cygwin</a>.
* Modifying this program is the basis for Assignment 1.
* </p>
*
* <p>
* Testing the running server program from telnet looks like this:
* </p>
* <pre>
* it154916:projects mcgredo$ <b>telnet localhost 2317</b>
* Trying ::1...
* Connected to localhost.
* Escape character is '^]'.
* This was written by the server
* Connection closed by foreign host.
* </pre>
* <p>
* Notice that "This was written by the server" matches
* what is written by the code below, over the output stream.
* </p>
*
* <p>
* After this first connection the program below drops to
* the bottom of the method, and does not repeat itself.
* In other words, the program exits.
* </p>
*
* @see <a href="../../../src/TcpExamples/TcpExample1TerminalLog.txt" target="_blank">TcpExample1TerminalLog.txt</a>
* @see <a href="../../../src/TcpExamples/TcpExample1NetBeansConsoleTelnet.png" target="_blank">TcpExample1NetBeansConsoleTelnet.png</a>
* @see <a href="../../../src/TcpExamples/TcpExample1NetBeansConsoleTelnet.pdf" target="_blank">TcpExample1NetBeansConsoleTelnet.pdf</a>
* @see <a href="../../../src/TcpExamples/TcpExample1ScreenshotNetcat.png" target="_blank">TcpExample1ScreenshotNetcat.png</a>
* @see <a href="../../../src/TcpExamples/TcpExample1ScreenshotTelnet.png" target="_blank">TcpExample1ScreenshotTelnet.png</a>
* @see <a href="https://savage.nps.edu/Savage/developers.html#Cygwin" target="blank">Savage Developers Guide: Cygwin</a>
* @see <a href="https://savage.nps.edu/Savage/developers.html#telnet" target="blank">Savage Developers Guide: telnet</a>
*
* @author mcgredo
* @author brutzman@nps.edu
*/
public class TcpExample1TelnetYu
{
/** Default constructor */
public TcpExample1TelnetYu()
{
// default constructor
}
/**
* Program invocation, execution starts here
* @param args command-line arguments
*/
public static void main(String[] args)
{
try
{
System.out.println(TcpExample1TelnetYu.class.getName() + " has started and is waiting for a connection.");
System.out.println(" help: https://savage.nps.edu/Savage/developers.html#telnet");
System.out.println(" terminal: enter (telnet localhost 2317) or, for macOS (nc localhost 2317)..." );
// The ServerSocket waits for a connection from a client.
// It returns a Socket object when the connection occurs.
ServerSocket serverSocket = new ServerSocket(2317);
// Use Java io classes to write text (as opposed to
// unknown bytes of some sort) to the client
// The Socket object represents the connection between
// the server and client, including a full duplex connection
try (Socket clientConnection = serverSocket.accept()) // listen, wait here for a client to connect
{
// OK we got something, time to respond!
// 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);
String remoteHostname = clientConnection.getInetAddress().getHostAddress();
ps.println("The " + remoteHostname + " client response was written by server " + TcpExample1TelnetYu.class.getName()); // to remote client
System.out.println("The " + remoteHostname + " server response was written by server " + TcpExample1TelnetYu.class.getName()); // to server console
// "flush()" in important in that it forces a write
// across what is in fact a slow connection
ps.flush();
}
System.out.println(TcpExample1TelnetYu.class.getName() + " completed successfully.");
}
catch(IOException ioe)
{
System.err.println("Exception with " + TcpExample1TelnetYu.class.getName() + " networking:"); // describe what is happening
System.err.println(ioe);
// Provide more helpful information to user if exception occurs due to running twice at one time
// brute force exception checking, can be brittle if exception message changes
// if (e.getMessage().equals("Address already in use: NET_Bind"))
if (ioe instanceof java.net.BindException)
System.err.println("*** Be sure to stop any other running instances of programs using this port!");
}
}
}
/**
* TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
*
* @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
* @see java.lang.Package
* @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
* @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
*/
package MV3500Cohort2024JulySeptember.homework1.Yu;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment