Hii, I have selected the project called (What is Named Data Networking (NDN) Project?), the thing i wanted for this project is to write a paper form which i have attached below and i need 3 pages of l

Term Project

Following options are suggested for your term project:

  1. Pick a topic from the instructor’s list below and do your research, design, and implementation. Provide a design and implementation documentation. A short PowerPoint presentation outlining your project should be provided. Submit your code with a user manual. You may include a short report (no more than 5 pages) detailing your solution and listing references.

  2. Pick a research topic related to Java Network Programming and do your research. The research result should be a summary report no longer than 10 pages no less than 3 pages with at least an abstract, an introduction, problem statement, literature review (background), and references. It may have results, conclusion, and future directions, etc. You must provide a PowerPoint slide highlighting the main points of the work. You must have at least three papers in your literature review. (You may adopt questions from Paperform.pdf (posted in the Bb), designed by William G. Griswold).

  3. Prepare a short chapter on a specific topic related to Java Network Programming. Prepare a PowerPoint Slide for teaching that topic.

  4. Pick a research paper, which is practical and has some implementation portion. Try to duplicate the results of the paper by going through its implementation or experiments yourself. Submit a summary report with your results and code.

  5. Suggest your own practical or research project.

A term project can be worked on individually or by teams of two people at most, depending on the size of project. Please let me know no later than November 9th of your project topic and your teammate, if any. The final date for submitting your results for the term projects is Sunday, December 9th, 2018.

List of suggested term projects for CSC583:

A full-fledged HTTP server with extra features

A web server is a server program that waits for incoming requests on the HTTP port and acts on those to send the contents of local files back to the requester. It can be implemented in just a few dozen lines of code. You may start from scratch or use an existing basic http server that can serve an entire document tree, including images, applets, HTML files, and text files. The following features are required:

  1. Use a thread pool for processing incoming connections.

  2. At least GET requests for HTML and image (.jpg and .gif) files processed.

  3. A well-designed web server architecture that could be easily maintained and enhanced in the future. Document your design with diagrams and text. Figure 17.5 on page 335 of your textbook should server as a model.

The following desired features are worth 5% each. You need to have at least 4 of these features implemented to get full credit for your project:

  1. Provide support for executing CGI programs in response to client requests. This support should include both get and post requests.

  2. Support for other request methods, such as POST, HEAD, and PUT.

  3. A log file in the common web log file format.

  4. Support for multiple document roots, so that individual users can have their own sites.

  5. Server-side includes and / or Java Server Pages.

  6. A server administration interface.

A transaction-processing project

The objective of this project is to learn about Message Streams. Please study chapter 28 of a book by Merlin Hughes, et al. on Java Network Programming, ISBN 9781884777493—pages 659-676. You may find a free download online. Implement a transaction-processing project similar to the example on page 670. You can design your system for a simple ATM machine, an on-line bank account (just deposit, withdraw and keep track of balance), or any other example that you can imagine.

A Mobile agent Project

Design and implement a mobile agent project. The agent goes through three hosts and prints out a message indicating that it was there such as “Hi, 007 was here!” You may use RMI technology and register servers/visiting hosts with a service directory so that the agent could ask for the next host to visit.

A private Instant Messaging for a Specific Company

Develop an Instant Messaging for a specific company that allows communication with employees using MySql (freeware) database for list of users.

The Chatter system

We would like to simulate the operation of a Chat server. Each user (client) logs into the system (server); and typed messages by each user is relayed or broadcast to each of the other users by the server.


You need to set up a server on a vacant port. The service should allow multiple connections from users. A sample chat session should go like this. You use telnet for the clients:


Chat> java ChatServer 8191

Chat> The chat server is running on port 8191


Chat> telnet Jupiter 8191

Trying 137.215.17.16 …

New client …

Escape character is ^].

*** Weclome to Chatter ***

Type BYE to end

What is your name?

Nelson

Chatter: Nelson has joined the discussion.

Anyone out there?

Nelson: Anyone out there?

New client no. 1 on client’s port 1026

Chatter: Seagull has joined the discussion.

Hi seagull

Nelson: hi Seagull

Nelson: BYE

Chatter: Nelson has left the discussion.

Connection closed by foreign host.


The first issue is how to keep track of clients within the server. Clients can sign on and leave at will, the max could be variable (linked list) or you may set it to 50.

Next, how do we remove a client from the list? Clearly, the client must request such a removal, once a BYE has been detected. The client knows what its socket reference is. Therefore, the server can look through the list, comparing socket refs, and when a match is found, delete that object from the list.

Broadcasting the message to everybody should be easy. The removal and broadcast operations both access the list of clients kept in the server. Therefore, it would be wise to not activate both operations simultaneously.


Please document your design with class diagrams and explanation.

POP3 Server

Write a POP3 server that accepts the following commands: USER, PASS, LIST, RETR, DELE, and QUIT.

References

  1. POP3 protocol is defined as RFC1939: http://www.faqs.org/rfc/ or http://www.ietf.org/rfc.html

  2. Tanenbaum: Computer Networks, Prentice Hall, 2003, pp. 605-608.

Peer-to-Peer Computing

Perform research on JXTA, http://en.wikipedia.org/wiki/JXTA , and write a report on the peer-to-peer paradigm that it supports. Include in your report a description of the architecture, the API, and sample programs.

Backgammon on the Internet

A backgammon game was a term project for OOD course. Those of you, who have implemented it in that course, could extend it to an Internet game. That is, two players or a player and the computer can play backgammon over the Internet. You may use your old code to extend it. New students can also choose this project. A sample code will be provided.

Ref: http://www.bkgm.com/motif.html

Secure Socket Layer and digital certificates

Conduct a study on SSL and digital certificates. Design and implement a secure server that can take orders online from clients. You are free to design any application but it should involve use of SslServerSocket. The theory behind authentication, digital certificate, and SSL should be covered in the report.

A Java RMI Program for File Transfer

Build a Java RMI program that will download a file from a server’s directory. The server program listens for file requests and then sends the file requested back to the client. The client uses a window to display the files in the server’s directory. Clicking on it, and then clicking the download button selects the file. Also, do the reverse. That is, the server provides the client with a link or upload button. When the user clicks on the upload button, it will allow browsing through the local directory in order to select a file for uploading.

JNDI, JMS, and JavaMail APIs

Do a study of and familiarize yourself with one of following J2EE APIs: JNDI, JMS, or JavaMail. Provide a demo of typical application for the selected API.

Jini Project

The Jini framework provides a lookup service with which a host can register itself and the agent object can query the lookup service for a prospective host and communicate with it. Jini provides classes JiniManager and LookupDiscoveryManager, which keeps track of the host and the methods exposed by it. The agent can get a list of these hosts and traverse through them.
You may use the following websites as a link to topics on mobile agents and Jini:
http://www.javaworld.com/javaworld/jw-06-1998/jw-06-howto.html?page=1
http://www.codeproject.com/KB/architecture/MobileAgents.aspx
Using mobile agents to circulate a survey(eg: facilities provided by library or cafeteria) was one application that you may want to implement. The agent can move around to multiple host machines with survey questions and return back with a list of hosts and their replies to the survey.
One advantage of using mobile agents in this scenario, instead of RMI or servlets is that, the hosts answering a survey need not worry about the connection between their machines and the server on which the survey is posted. Even while answering the survey, if the agent loses connection to the server from which it came, the details of the survey are not lost since the agent is present locally and can reconnect to the server later.

A Java 8 Project

Study new features of Java 8 such as Lambda Expressions, Stream API, functional programming features, and Collections. These features allow better use of multicore machines and ease of multithreading for complex application with larger data. The following is a simple example of its usage in an echo server. A traditional java solution is followed by a functional solution using Java 8 features such as Supplier interface in conjunction with a Stream object and a lambda expression. Come up with your own example or another existing application of Java 8 in network programming. Show both traditional implementation and its use of Java 8 features implementation. Discuss any advantages gained in new implementation, if any. You may use the following references as a starting point for your study.

http://winterbe.com/posts/2014/03/16/java-8-tutorial/

http://javarevisited.blogspot.com/2013/11/java-8-tutorials-resources-and-examples-lambda-expression-stream-api-functional-interfaces.html


import java.util.*;

import java.io.*;

import java.net.*;

public class SimpleEchoClient {

public static void main(String args[]) {

System.out.println("Simple Echo Client");

try {

System.out.println("Waiting for connection.....");

InetAddress localAddress = InetAddress.getLocalHost();

try (Socket clientSocket = new Socket(localAddress, 6000);

PrintWriter out = new PrintWriter(

clientSocket.getOutputStream(), true);

BufferedReader br = new BufferedReader(

new InputStreamReader(

clientSocket.getInputStream()))) {

System.out.println("Connected to server");

Scanner scanner = new Scanner(System.in);

while (true) {

System.out.print("Enter text: ");

String inputLine = scanner.nextLine();

if ("quit".equalsIgnoreCase(inputLine)) {

break;

}

out.println(inputLine);

String response = br.readLine();

System.out.println("Server response: " + response);

}


}

} catch (IOException ex) {

// Handle exceptions

}

}

}



//Java 8 version

import java.util.*;

import java.io.*;

import java.net.*;

import java.util.function.*;

import java.util.stream.*;

public class SimpleEchoClient8 {

public static void main(String args[]) {

System.out.println("Simple Echo Client");

try {

System.out.println("Waiting for connection.....");

InetAddress localAddress = InetAddress.getLocalHost();

try (Socket clientSocket = new Socket(localAddress, 6000);

PrintWriter out = new PrintWriter(

clientSocket.getOutputStream(), true);

BufferedReader br = new BufferedReader(

new InputStreamReader(

clientSocket.getInputStream()))) {

System.out.println("Connected to server");

Scanner scanner = new Scanner(System.in);

Supplier<String> scannerInput = () -> scanner.next();

System.out.print("Enter text: ");

Stream.generate(scannerInput)

.map(s -> {

out.println(s);

System.out.println("Server response: " + s);

//System.out.print("Enter text: ");

return s;

})

.allMatch(s -> !"quit".equalsIgnoreCase(s));


}

} catch (IOException ex) {

// Handle exceptions

}

}

}



import java.io.*;

import java.net.*;

public class SimpleEchoServer {


public static void main(String[] args) {

Socket clientSocket = null;

System.out.println("Simple Echo Server");

try (ServerSocket serverSocket = new ServerSocket(6000)){

System.out.println("Waiting for connection.....");

clientSocket = serverSocket.accept();

System.out.println("Connected to client");

} catch (IOException ex) {

// Handle exceptions

}

try (BufferedReader br = new BufferedReader(

new InputStreamReader(

clientSocket.getInputStream()));

PrintWriter out = new PrintWriter(

clientSocket.getOutputStream(), true)){

String inputLine;

while ((inputLine = br.readLine()) != null) {

System.out.println("Server: " + inputLine);

out.println(inputLine);

}

}catch (IOException e) {

}

}

}




//Java 8 version

import java.io.*;

import java.net.*;

import java.util.function.*;

import java.util.stream.*;

public class SimpleEchoServer8 {


public static void main(String[] args) {

Socket clientSocket = null;

System.out.println("Simple Echo Server");

try (ServerSocket serverSocket = new ServerSocket(6000)){

System.out.println("Waiting for connection.....");

clientSocket = serverSocket.accept();

System.out.println("Connected to client");

} catch (IOException ex) {

// Handle exceptions

}

try (BufferedReader br = new BufferedReader(

new InputStreamReader(

clientSocket.getInputStream()));

PrintWriter out = new PrintWriter(

clientSocket.getOutputStream(), true)){


Supplier<String> socketInput = () -> {

try {

return br.readLine();

} catch (IOException ex) {

return null;

}

};

Stream<String> stream = Stream.generate(socketInput);

stream

.map(s -> {

System.out.println("Client request: " + s);

out.println(s);

return s;

})

.allMatch(s -> s != null);

}catch(IOException e)

{

}

}

}





What is Named Data Networking (NDN) Project?



Conduct a research on NDN and learn about its roots, architecture, benefits, and current status. See if you can find some practical examples of its usage and code examples. Write a paper with at least 3 references on its vision, its possible role on future Internet architecture, and any advantages/disadvantages you see in NDN.

You may start your research from this link: http://named-data.net/