+ All Categories
Home > Documents > Java Study Material

Java Study Material

Date post: 04-Apr-2018
Category:
Upload: anuj-nagpal
View: 232 times
Download: 0 times
Share this document with a friend

of 22

Transcript
  • 7/30/2019 Java Study Material

    1/22

    UNIT-2 Networking

    Lecture-5

    Topics:

    (1) Basic Concepts on Networking

    IP AddressProtocol

    Ports

    The Client/Server Paradigm-Sockets

    (2)Connecting to a server

    (1)Basic Concept on Networking:

    The Internet:

    A global network of computers connected together in various ways

    Remains functional despite of diversity of hardware and software connected togetherPossible through communication standards defined and conformed to

    Guarantee compatibility and reliability ofcommunication

    IP Address:Logically similar to the traditional mailing address.

    An address uniquely identifies a particular object.

    Each computer connected to the Internet has a unique IP address.

    A 32-bit number used to uniquely identify each computer connected to the Internet192.1.1.1

    docs.rinet.ru

    Protocol:

    Why protocols?

    Different types of communication occurring over the internet.

    Each type of communication requires a specific andunique protocol.

    Definition:

    - Set of rules and standards that define a certain type of Internet communication

    Describes the following information:

  • 7/30/2019 Java Study Material

    2/22

    - Social protocol used in a telephone conversation

    Gives us confidence and familiarity of knowing what to do.

    Some important protocols used over the Internet

    Hypertext Transfer Protocol (HTTP)

    Used to transfer HTML documents on the Web

    File Transfer Protocol (FTP)

    More general compared to HTTP

    Allows you to transfer binary files over the Internet

    Both protocols have their own set of rules and standards on how

    data is tansferred

    Java provides support for both protocols

    Port:

    Protocols only make sense when used in the context of a service

    HTTP protocol is used when you are providing Web content through an HTTP service

    Each computer on the Internet can provide a variety.of services.

    Why Ports?

    The type of service must be known before information can be transferred.

    Definition:

    A 16-bit number that identifies each service offered by a network server.

    Using a particular service to establish a line of communication through

    a specific protocol.

    Need to connect to the appropriate port.Standard ports

    Numbers specifically associated with a particular type of service

    Examples:

    The FTP service is located on port 21

    The HTTP service is located on port 80

    Given port values below 1024

    Port values above 1024

    Available for custom communication

  • 7/30/2019 Java Study Material

    3/22

    The Client/Server paradigm:

    Basis for Java networking framework

    Involves two major elements:

    Client

    Machine in need of some type of information

    Server

    Machine storing information and waiting to give it out.

    Scenario:

    Client connects to a server and queries for certain

  • 7/30/2019 Java Study Material

    4/22

    Socket:

    Definitions:

    Software abstraction for an input or output medium of communication

    Communication channels that enable you to transfer data through a particular port

    - An endpoint for communication between two machinesA particular type of network communication used in most Java network programming

    Java performs all of its low-level network communication through sockets

    Java Networking Package:

    Thejava.netpackage

    Provides classes useful for developing networking applications

    Some classes in the package:

    - ServerSocket

    Socket

    MulticastSocket

    DatagramPacket

    Server Socket Class:Provides the basic functionalities of a server

    Has four constructors

  • 7/30/2019 Java Study Material

    5/22

    Server Socket Class:Method:

    Server Socket Class Example:1import java.net.*;2 import java.io.*;

    3 public class EchoingServer {

    4 public static void main(String [] args) {5 ServerSocket server = null;

    6 Socket client;

    7 try {

    8 server = new ServerSocket(1234);9 //1234 is an unused port number

    10 } catch (IOException ie) {

    11 System.out.println("Cannot open socket.");12 System.exit(1);

    13 }

    14 Contineuedwhile(true) {

    16 try {

    17 client = server.accept();

    18 OutputStream clientOut =

    19 client.getOutputStream();20 PrintWriter pw = new PrintWriter(clientOut, true);

    22 InputStream clientIn =

    23 client.getInputStream();24 BufferedReader br = new BufferedReader(new

    25 InputStreamReader(clientIn));

    26 pw.println(br.readLine());27 } catch (IOException ie) {}}}

  • 7/30/2019 Java Study Material

    6/22

    (2)Connecting to a server:

    Here file name is Greeting Client that connect to a server by using a socket.

    Example:

    import java.net.*;

    import java.io.*;

    public class GreetingClient

    {

    public static void main(String [] args)

    {

    String serverName = args[0];int port = Integer.parseInt(args[1]);

    try{

    System.out.println("Connecting to " + serverName + " on port " + port);Socket client = new Socket (serverName, port);

    System.out.println("Just connected to "+ client.getRemoteSocketAddress());

    OutputStream outToServer = client.getOutputStream();

    DataOutputStream out =new DataOutputStream(outToServer);

    out.writeUTF("Hello from " + client.getLocalSocketAddress());

    InputStream inFromServer = client.getInputStream();DataInputStream in =

    new DataInputStream(inFromServer);

    System.out.println("Server says " + in.readUTF());client.close();

    } catch(IOException e)

    {e.printStackTrace();

    }

    }

    }

  • 7/30/2019 Java Study Material

    7/22

    Lecture -6

    Topics: Java SocketImplementing Server

    Implementing Client.

    Sending Email.

    Java Socket:

    17

    Java Sockets

    ServerSocket(1234)

    Socket(128.250.25.158, 1234)

    Output/write stream

    Input/read stream

    It can be host_name like mandroo.cs.mu.oz.au

    Client

    Server

    Implementing a server:

    1.Open the Server Socket:

    ServerSocket server;DataOutputStream os;

    DataInputStream is;

    server = new ServerSocket( PORT );2. Wait for the Client Request:

  • 7/30/2019 Java Study Material

    8/22

    Socket client = server.accept();

    3. Create I/O streams for communicating to the clientis = new DataInputStream( client.getInputStream() );

    os = new DataOutputStream( client.getOutputStream() );

    4. Perform communication with client

    Receive from client: String line = is.readLine();Send to client: os.writeBytes("Hello\n");

    5. Close sockets: client.close();

    For multithreaded server:while(true) {

    i. wait for client requests (step 2 above)

    ii. create a thread with client socket as parameter (the thread creates streams(as in step3 and does communication as stated in (4). Remove thread once service is provided.

    }

    Implementing Client:

    1. Create a Socket Object:

    client = new Socket( server, port_id );

    2. Create I/O streams for communicating with the server.is = new DataInputStream(client.getInputStream() );

    os = new DataOutputStream( client.getOutputStream() );

    3. Perform I/O or communication with the server: Receive data from the server:

    String line = is.readLine();

    Send data to the server:os.writeBytes("Hello\n");

    4. Close the socket when done:

    client.close();

    Example of Server:

    import java.net.*;

    import java.io.*;public class SimpleServer

    {

    public static void main(String args[]) throws IOException {

    // Register service on port 1234ServerSocket s = new ServerSocket(1234);

    Socket s1=s.accept(); // Wait and accept a connection

  • 7/30/2019 Java Study Material

    9/22

    // Get a communication stream associated with the socket

    OutputStream s1out = s1.getOutputStream();DataOutputStream dos = new DataOutputStream (s1out);

    // Send a string!

    dos.writeUTF("Hi there");

    // Close the connection, but not the server socketdos.close();

    s1out.close();

    s1.close();}

    }

    Example of Client:

    import java.net.*;import java.io.*;

    public class SimpleClient {public static void main(String args[]) throws IOException {

    // Open your connection to a server, at port 1234

    Socket s1 = new Socket("mundroo.cs.mu.oz.au",1234);

    // Get an input file handle from the socket and read the inputInputStream s1In = s1.getInputStream();

    DataInputStream dis = new DataInputStream(s1In);

    String st = new String (dis.readUTF());System.out.println(st);

    // When done, just close the connection and exit

    dis.close();

    s1In.close();s1.close();

    }

  • 7/30/2019 Java Study Material

    10/22

    Sending Email:

    import java.util.*;import javax.mail.*;

    import javax.mail.internet.*;

    import javax.activation.*;

    public class SendEmail

    {public static void main(String [] args)

    {

    // Recipient's email ID needs to be mentioned.

    String to = "[email protected]";

    // Sender's email ID needs to be mentionedString from = "[email protected]";

    Assuming you are sending email from localhost

    String host = "localhost";

    // Get system properties

    Properties properties = System.getProperties();

    // Setup mail server

    properties.setProperty("mail.smtp.host", host);

    // Get the default Session object.Session session = Session.getDefaultInstance(properties);

    try{// Create a default MimeMessage object.

    MimeMessage message = new MimeMessage(session);

    // Set From: header field of the header.

    message.setFrom(new InternetAddress(from));

    //Set To: header field of the header.

    message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

    // Set Subject: header field

    message.setSubject("This is the Subject Line!");

    // Now set the actual message

    message.setText("This is actual message");

  • 7/30/2019 Java Study Material

    11/22

    // Send messageTransport.send(message);

    System.out.println("Sent message successfully....");

    }catch (MessagingException mex) {

    mex.printStackTrace();}

    }

    }

  • 7/30/2019 Java Study Material

    12/22

    Lecture-7

    Topic: URL

    Url Connections

    Reading URL connectionWriting URL connection.

    URL: Uniform Resource Locator (URL) is a Uniform Resource Identifier(URI) that specifieswhere an identified resource is available and the mechanism for retrieving it.

    Url Connection.

    If you've successfully used openConnection() to initiate communications with a URL, then youhave a reference to a URLConnection object. The URLConnection class contains many methods

    that let you communicate with the URL over the network. URLConnection is an HTTP-centric

    class--many of its methods are useful only when working with HTTP URLs. However, mostURL protocols let you read from and write to the connection so this page shows you how to both

    read from and write to a URL through a URLConnection object.

    Reading from a URLConnection

    The following program performs the same function as the program shown in Reading Directly

    from a URL. However, rather than opening a stream directly from the URL, this program

    explicitly opens a connection to the URL, gets an input stream on the connection, and reads from

    the input stream:import java.net.*;

    import java.io.*;

    class ConnectionTest {public static void main(String[] args) {

    try {URL yahoo = new URL("http://www.yahoo.com/");URLConnection yahooConnection = yahoo.openConnection();

    DataInputStream dis = new DataInputStream(yahooConnection.getInputStream());

    String inputLine;

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

    System.out.println(inputLine);

    http://en.wikipedia.org/wiki/Uniform_Resource_Identifierhttp://journals.ecs.soton.ac.uk/java/tutorial/networking/urls/readingURL.htmlhttp://journals.ecs.soton.ac.uk/java/tutorial/networking/urls/readingURL.htmlhttp://journals.ecs.soton.ac.uk/java/tutorial/networking/urls/readingURL.htmlhttp://journals.ecs.soton.ac.uk/java/tutorial/networking/urls/readingURL.htmlhttp://en.wikipedia.org/wiki/Uniform_Resource_Identifier
  • 7/30/2019 Java Study Material

    13/22

    }

    dis.close();} catch (MalformedURLException me) {

    System.out.println("MalformedURLException: " + me);

    } catch (IOException ioe) {

    System.out.println("IOException: " + ioe);}

    }

    }

    Writing to a URLConnection

    Many HTML pages containforms--text fields and other GUI objects that let you enter data to the

    server. After you type in the required information and initiate the query by clicking on a button,the Web browser you're using writes the data to the URL over the network. At the other end, a

    (usually) cgi-bin script on the server the data, processes it, and then sends you back a response,usually in the shape of a new HTML page. This scenario is often used to support searching.

    Many cgi-bin scripts use the POST METHOD for reading the data from the client. Thus writing

    to a URL is often known asposting to a URL. Server-side scripts that use the POST METHOD

    read from their standard input.

    Java programs can also interact with cgi-bin scripts on the server-side. They simply must be able

    to write to a URL, thus providing data to the server. Your program can do this by following these

    steps:

    1. Create a URL.2. Open a connection to the URL.3. Get an output stream from the connection. This output stream is connected to the standard

    input stream of the cgi-bin script on the server.

    4. Write to the output stream.5. Close the output stream.6. Here's an example program that runs the backwards script over the network through a

    URLConnection:

    import java.io.*;import java.net.*;

    public class ReverseTest {

    public static void main(String[] args) {

    try {

    if (args.length != 1) {System.err.println("Usage: java ReverseTest string_to_reverse");

  • 7/30/2019 Java Study Material

    14/22

    System.exit(1);

    }String stringToReverse = URLEncoder.encode(args[0]);

    URL url = new URL("http://java.sun.com/cgi-bin/backwards");

    URLConnection connection = url.openConnection();

    PrintStream outStream = new PrintStream(connection.getOutputStream());

    outStream.println("string=" + stringToReverse);outStream.close();

    DataInputStream inStream = new DataInputStream(connection.getInputStream());

    String inputLine;

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

    System.out.println(inputLine);

    }

    inStream.close();

    }catch (MalformedURLException me)

    {

    System.err.println("MalformedURLException: " + me);

    }

    catch (IOException ioe) {

    System.err.println("IOException: " + ioe);

    }

    }

    }

    Let's examine the program and see how it works. First, the program processes its command linearguments:

    if (args.length != 1) {

    System.err.println("Usage: java ReverseTest string_to_reverse");System.exit(1);

    }

    String stringToReverse = URLEncoder.encode(args[0]);

    These lines ensure that the user provides one and only one command line argument to theprogram and encodes it. The command line argument is the string to be reversed by the cgi-bin

    script backwards. The command line argument may have spaces or other non-alphanumeric

    characters in it. Those characters must be encoded because various processing may happen on

    the string on its way to the server. This is achieved by the URLEncoder class.

    Next the program creates the URL object--the URL for the backwards script on java.sun.com.

  • 7/30/2019 Java Study Material

    15/22

    URL url = new URL("http://java.sun.com/cgi-bin/backwards");

    Next, the program creates a URLConnection and then opens an output stream on that connection.

    The output stream is filtered through a PrintStream.URLConnection connection = url.openConnection();

    PrintStream outStream = new PrintStream(connection.getOutputStream());

    The second line above calls the getOutputStream() method on the connection. If the URL does

    not support output, this method throws an UnknownServiceException. If the URL supports

    output, then this method returns an output stream that is connected to the standard input streamof the URL on the server side--the client's output is the server's input.

    Next, the program writes the required information to the output stream and closes the stream:

    outStream.println("string=" + stringToReverse);

    outStream.close();

    This line writes to the output stream using the println() method. So you can see, writing data to aURL is as easy as writing data to a stream. The data written to the output stream on the client-

    side is the input for the backwards script on the server-side. The ReverseTest program constructs

    the input in the form required by the script by concatenating string= to the encoded string to bereversed.

    Often, as with this example, when you are writing to a URL you are passing information to a cgi-bin script which reads the information you write, performs some action and then sends

    information back to you via the same URL. So it's likely that you will want to read from the

    URL after you've written to it. The ReverseTest program does that next:

    DataInputStream inStream = new DataInputStream(connection.getInputStream());

    String inputLine;

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

    System.out.println(inputLine);

    }inStream.close();

  • 7/30/2019 Java Study Material

    16/22

    Lecture-8

    Topic: Advanced Socket programming

    (i)Advanced java client(ii)advanced java server

    (iii)Multithreaded java server

    Advanced java client:

    import java.awt.Color;

    import java.awt.BorderLayout;import java.awt.event.*;

    import javax.swing.*;

    import java.io.*;

    import java.net.*;class SocketClient extends JFrame

    implements ActionListener {JLabel text, clicked;JButton button;

    JPanel panel;

    JTextField textField;

    Socket socket = null;PrintWriter out = null;

    BufferedReader in = null;

    SocketClient(){ //Begin Constructortext = new JLabel("Text to send over socket:");

    textField = new JTextField(20);

    button = new JButton("Click Me");button.addActionListener(this);panel = new JPanel();

    panel.setLayout(new BorderLayout());

    panel.setBackground(Color.white);getContentPane().add(panel);

    panel.add("North", text);

    panel.add("Center", textField);

  • 7/30/2019 Java Study Material

    17/22

    panel.add("South", button);

    } //End Constructorpublic void actionPerformed(ActionEvent event){

    Object source = event.getSource();

    if(source == button){

    //Send data over socketString text = textField.getText();

    out.println(text);

    textField.setText(new String(""));//Receive text from server

    try{

    String line = in.readLine();System.out.println("Text received :" + line);

    } catch (IOException e){

    System.out.println("Read failed");

    System.exit(1);

    {{

    {

    public void listenSocket(){

    //Create socket connection

    try{socket = new Socket("kq6py", 4444);

    out = new PrintWriter(socket.getOutputStream(), true);

    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));} catch (UnknownHostException e) {

    System.out.println("Unknown host: kq6py.eng");

    System.exit(1);

    } catch (IOException e) {System.out.println("No I/O");

    System.exit(1);

    {{

    public static void main(String[] args){

    SocketClient frame = new SocketClient();frame.setTitle("Client Program");

    WindowListener l = new WindowAdapter() {

    public void windowClosing(WindowEvent e) {

    System.exit(0);{

    ;{

    frame.addWindowListener(l);

    frame.pack();frame.setVisible(true);

    frame.listenSocket();

  • 7/30/2019 Java Study Material

    18/22

    }

    }

    Advanced java server:

    import java.awt.Color;

    import java.awt.BorderLayout;

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

    import java.io.*;

    import java.net.*;

    class SocketServer extends JFrame

    implements ActionListener {JButton button;

    JLabel label = new JLabel("Text received over socket:");JPanel panel;

    JTextArea textArea = new JTextArea();

    ServerSocket server = null;

    Socket client = null;BufferedReader in = null;

    PrintWriter out = null;

    String line;SocketServer(){ //Begin Constructor

    button = new JButton("Click Me");

    button.addActionListener(this);

    panel = new JPanel();panel.setLayout(new BorderLayout());

    panel.setBackground(Color.white);

    getContentPane().add(panel);panel.add("North", label);

    panel.add("Center", textArea);

    panel.add("South", button);} //End Constructor

    public void actionPerformed(ActionEvent event) {

    Object source = event.getSource();

    if(source == button){textArea.setText(line);

    {

    {

    public void listenSocket(){try{

    server = new ServerSocket(4444);

  • 7/30/2019 Java Study Material

    19/22

    } catch (IOException e) {

    System.out.println("Could not listen on port 4444");System.exit(-1);

    {

    try{

    client = server.accept();} catch (IOException e) {

    System.out.println("Accept failed: 4444");

    system.exit(-1);

    {

    try{in = new BufferedReader(new InputStreamReader(client.getInputStream()));

    out = new PrintWriter(client.getOutputStream(), true);

    } catch (IOException e) {System.out.println("Accept failed: 4444");

    System.exit(-1);{

    while(true){

    try{line = in.readLine();

    //Send data back to client

    out.println(line);

    } catch (IOException e) {System.out.println("Read failed");

    System.exit(-1);

    {{

    {

    protected void finalize(){

    //Clean uptry{

    in. Close();

    out.close();server.close();

    } catch (IOException e) {

    System.out.println("Could not close.");

    System.exit(-1);{

    {

    public static void main(String[] args){SocketServer frame = new SocketServer();

    frame.setTitle("Server Program");

    WindowListener l = new WindowAdapter() {

    public void windowClosing(WindowEvent e) {

  • 7/30/2019 Java Study Material

    20/22

    System.exit(0);

    {;{

    frame.addWindowListener(l);

    frame.pack();

    frame.setVisible(true)frame.listenSocket();

    }

    }

    Multithreaded Java Server:

    import java.awt.Color;

    import java.awt.BorderLayout;import java.awt.event.*;

    import javax.swing.*;import java.io.*;

    import java.net.*;

    class ClientWorker implements Runnable {

    private Socket client;private JTextArea textArea;

    ClientWorker(Socket client, JTextArea textArea) {this.client = client;

    this.textArea = textArea;

    {

    public void run(){String line;

    BufferedReader in = null;

    PrintWriter out = null;try{

    in = new BufferedReader(new InputStreamReader(client.getInputStream()));

    out = new PrintWriter(client.getOutputStream(), true);} catch (IOException e) {

    System.out.println("in or out failed");

    System.exit(-1);

    {while(true){

    try{

    line = in.readLine();

    //Send data back to clientout.println(line);

    textArea.append(line);

  • 7/30/2019 Java Study Material

    21/22

    } catch (IOException e) {

    System.out.println("Read failed");System.exit(-1);

    {

    {

    {{

    class SocketThrdServer extends JFrame{

    JLabel label = new JLabel("Text received over socket:");JPanel panel;

    JTextArea textArea = new JTextArea();

    ServerSocket server = null;SocketThrdServer(){ //Begin Constructor

    panel = new JPanel();

    panel.setLayout(new BorderLayout());

    panel.setBackground(Color.white);

    getContentPane().add(panel);panel.add("North", label);

    panel.add("Center", textArea);} //End Constructor

    public void listenSocket(){

    try{

    server = new ServerSocket(4444);} catch (IOException e) {

    System.out.println("Could not listen on port 4444");

    System.exit(-1);{

    while(true){

    ClientWorker w;

    try{w = new ClientWorker(server.accept(), textArea);

    Thread t = new Thread(w);

    t.start();} catch (IOException e) {

    System.out.println("Accept failed: 4444")

    System.out.println("Accept failed: 4444");System.exit(-1);

    {

    {

    {protected void finalize(){

    //Objects created in run method are finalized when

    //program terminates and thread exits

    try{server.close();

    } catch (IOException e) {

  • 7/30/2019 Java Study Material

    22/22

    System.out.println("Could not close socket");

    System.exit(-1);{

    {

    public static void main(String[] args){

    SocketThrdServer frame = new SocketThrdServer();frame.setTitle("Server Program");

    WindowListener l = new WindowAdapter() {

    public void windowClosing(WindowEvent e) {System.exit(0);

    }

    ;{

    frame.addWindowListener(l);

    frame.pack();

    frame.setVisible(true);

    frame.listenSocket();}

    }


Recommended