0% found this document useful (0 votes)
10 views

Experiment 6 - HTTP & Others

The document provides an overview of Java networking, focusing on the java.net package, which includes classes for TCP and UDP protocols. It details socket programming, including the use of Socket and ServerSocket classes for establishing connections and communication between clients and servers. Additionally, it includes examples of one-to-one and many-to-many chat applications, as well as data retrieval from a remote database and a simple mail transfer protocol implementation.

Uploaded by

Chalachew Mulu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views

Experiment 6 - HTTP & Others

The document provides an overview of Java networking, focusing on the java.net package, which includes classes for TCP and UDP protocols. It details socket programming, including the use of Socket and ServerSocket classes for establishing connections and communication between clients and servers. Additionally, it includes examples of one-to-one and many-to-many chat applications, as well as data retrieval from a remote database and a simple mail transfer protocol implementation.

Uploaded by

Chalachew Mulu
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 63

INTRODUCTION

JAVA NETWORKING

 Java is a premier language for network programming


 java.net package encapsulates large number of classes and interfaces that provides
an easy to use means of access network resources
 The java.net package provides support for the two common network protocols:
o TCP: TCP stands for Transmission Control Protocol, which allows for reliable
communication between two applications. TCP is typically used over the
Internet Protocol, which is referred to as TCP/IP.
o UDP: UDP stands for User Datagram Protocol, a connection-less protocol that
allows for packets of data to be transmitted between applications.

SOCKET PROGRAMMING

 Sockets provide the communication mechanism between two computers using


TCP.
 The java.net.Socket class represents a socket, and the java.net.ServerSocket class
provides a mechanism for the server program to listen for clients and establish
connections with them.

The following steps occur when establishing a TCP connection between two computers
using sockets:

 The server instantiates a ServerSocket object, denoting which port number


communication is to occur on.
 The server invokes the accept() method of the ServerSocket class. This method
waits until a client connects to the server on the given port.
 After the server is waiting, a client instantiates a Socket object, specifying the
server name and port number to connect to.
 The constructor of the Socket class attempts to connect the client to the specified
server and port number. If communication is established, the client now has a
Socket object capable of communicating with the server.
 On the server side, the accept() method returns a reference to a new socket on the
server that is connected to the client's socket.

After the connections are established, communication can occur using I/O streams. Each
socket has both an OutputStream and an InputStream. The client's OutputStream is
connected to the server's InputStream, and the client's InputStream is connected to the
server's OutputStream.

1
Classes used are

1. Socket
2. ServerSocket
3. InetAddress
4. URL

Socket class

 A socket is an endpoint for communication between two machines

Constructors:

1. public Socket()
Creates an unconnected socket. Use the connect() method to connect this
socket to a server.

2. public Socket(String host, int port) throws UnknownHostException,


IOException
This method attempts to connect to the specified server at the specified port.
If this constructor does not throw an exception, the connection is successful and
the client is connected to the server.

Methods:

1. public void connect(SocketAddress host, int timeout) throws IOException


This method connects the socket to the specified host. This method is
needed only when you instantiated the Socket using the no-argument constructor.

2. public InputStream getInputStream() throws IOException


Returns the input stream of the socket. The input stream is connected to the
output stream of the remote socket.
3. public OutputStream getOutputStream() throws IOException
Returns the output stream of the socket. The output stream is connected to
the input stream of the remote socket

4. public void close() throws IOException


Closes the socket, which makes this Socket object no longer capable of connecting
again to any server

5. public int getPort()


Returns the port the socket is bound to on the remote machine.

6. public int getLocalPort()


Returns the port the socket is bound to on the local machine.

2
ServerSocket class

 A server socket waits for requests to come in over the network. It performs some
operation based on that request, and then possibly returns a result to the requester

Constructors:

1. public ServerSocket(int port) throws IOException

Creates a server socket on a specified port.

Parameters:
port - the port

2. public ServerSocket(int port, int count) throws IOException

Creates a server socket, binds it to the specified local port and listens to it. You can
connect to an annonymous port by specifying the port number to be 0.

Parameters:
port - the specified port
count - the amt of time to listen for a connection

Methods:

1. public InetAddress getInetAddress()


Gets the address to which the socket is connected.

2. public int getLocalPort()


Gets the port to which the socket is listening on.

3. public Socket accept() throws IOException


Accepts a connection. This method will block until the connection is made.

4. public void close() throws IOException


Closes the server socket.

5. public void bind(SocketAddress endpoint) throws IOException


Binds the server socket to a specific address.

*ServerSocket class is for SERVERS

*Socket class is for CLIENT

3
InetAddress class

 InetAddress encapsulates both numerical IP address and the domain name for that
address
 InetAddress can handle both IPv4 and IPv6 address

URL class

 Present in the java.net package, deals with the URL (Uniform resource locator)
which uniquely identify or locate resources on Internet.

Important terms

1. Host

Any system either connected in a network or not can be called a host

2. Localhost

The system on which the present program is running is localhost for that program

3. Server

Any software (program) that can receive a request, process it and can send a
response

4. Serverhost

Is the system installed with server software

5. Client

Any software (program) that can send a request and receive a response

6. Clienthost

Is the system installed with client software

7. Port

A single server host can have any number of server softwares. Each of the servers
running on the serverhost will be given a unique memory id number called “port”

4
LAB PROGRAMS

Identify well known ports of a remote system

Program

import java.io.*;
import java.net.*;
class WellKnown
{
public static void main(String args[])
{
for(int i=100;i<200;i++)
{
try
{
Socket s=new Socket(host,i);
System.out.println("There is a server on port :"+ i +" of: " +host);
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(IOException ie)
{
System.out.println(ie.getMessage());
}
}
}
}

5
Output:

6
2. Write a: One - One chat application

Many - Many chat application

One-One Chat application


• One-to-one communication is the act of an individual communicating with
another.

• In Internet terms, this can be done by e-mail but the most typical one-to-one
communication in the Internet is instant

Client Side program

import java.io.*;
import java.net.*;
import java.lang.*;
public class chatclient1
{
public static void main(String args[]) throws IOException
{
Socket csoc=null;
String host;
if(args.length>0)
host=args[0];
else
host="localhost";
PrintWriter pout=null;
BufferedReader bin=null;
try
{
csoc=new Socket(host,7);
pout=new PrintWriter(csoc.getOutputStream(),true);
bin=new BufferedReader(new InputStreamReader(csoc.getInputStream()));
}
catch(UnknownHostException e)
{
System.err.println("Unknownhost");
System.exit(1);
}
catch(IOException e)
{}
BufferedReader in=new BufferedReader(new
InputStreamReader(System.in));

7
String input;

while(true)
{
input=in.readLine();
pout.println(input);
String msg=bin.readLine();
System.out.println("client :"+msg);
if(msg.equals("bye"))
break;
}
in.close();
pout.close();
bin.close();
csoc.close();
}
}

Server Side Program

import java.io.*;
import java.net.*;
import java.lang.*;
public class chatserver1
{
public static void main(String args[]) throws IOException
{
ServerSocket ssoc=null;
try
{
ssoc=new ServerSocket(7);
}
catch(IOException e)
{
System.err.println("No connection established");
System.exit(1);
}
Socket csoc=null;
try
{
csoc=ssoc.accept();
}

8
catch(IOException e)
{
System.err.println("Not accepted");
System.exit(1);
}
PrintWriter pw=new PrintWriter(csoc.getOutputStream(),true);
BufferedReader br=new BufferedReader(new
InputStreamReader(csoc.getInputStream()));
String inline;
String outline;
try
{
DataInputStream din=new DataInputStream(System.in);
while(true)
{
inline=br.readLine();
System.out.println("Server :"+inline);
outline=din.readLine();
pw.println(outline);
if(outline.equals("bye"))
break;
}
}
catch(Exception e)
{
System.err.println(e);
}
pw.close();
br.close();
csoc.close();
ssoc.close();
}
}

9
Output

Server Side output window

Client Side output window

10
Many to Many Chat Application
 Each client opens a socket connection to the chat server and writes to the socket
whatever is written by one party can be seen by all other parties.
 Chat Rooms in yahoo is the best example for this many to many chat application.

Fig: Connections between systems

11
Client Side Program

import java.net.*;
import java.io.*;
public class mclient
{
public static void main(String a[])
{
BufferedReader in;
PrintWriter pw;
try
{
Socket s = new Socket("localhost",118);
System.out.println("Enter name");
in = new BufferedReader(new InputStreamReader(System.in));
String msg = in.readLine();
pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
pw.println(msg+"\n");
pw.flush();
while(true)
{
readdata rd = new readdata(s);
Thread t = new Thread(rd);
t.start();
msg = in.readLine();
if(msg.equals("quit"))
{
System.exit(0);
}
pw.println(msg);
pw.flush();
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}

12
class readdata implements Runnable
{
public Socket s;
public readdata(Socket s)
{
this.s = s;
}
public void run()
{
BufferedReader br;
try
{
while(true)
{
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String msg = br.readLine();
System.out.println(msg);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}

Server Side Program

import java.net.*;
import java.io.*;
public class mserver
{
public static Socket s[] = new Socket[10];
public static String user[] = new String[10];
public static int total;
public static void main(String a[])
{
int i=0;
try
{

13
ServerSocket ss = new ServerSocket(118);
while(true)
{
s[i] = ss.accept();
BufferedReader br = new BufferedReader(new
InputStreamReader(s[i].getInputStream()));
String msg = br.readLine();
user[i] = msg;

System.out.println(msg+" connected") ;
try
{
reqhandler req = new reqhandler(s[i],i);
total = i;
i++;
Thread t = new Thread(req);
t.start();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
class reqhandler implements Runnable
{
public int n;
public Socket s;
public reqhandler(Socket soc,int i)
{
s = soc;
n = i;
}
public void run()
{
String msg = "";

14
BufferedReader br,br1;
PrintWriter pw;
try
{
while(true)
{
br1 = new BufferedReader(new InputStreamReader(System.in));
if((br1.readLine()).equals("quit"))
System.exit(0);
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
msg = br.readLine();
if(msg.equals("quit"))
mserver.total--;
else
System.out.println(mserver.user[n]+"->"+msg);
if(mserver.total == -1)
{
System.out.println("Server Disconnected");
System.exit(0);
}
for(int k=0;k<=mserver.total;k++)
if(!mserver.user[k].equals(mserver.user[n])&&(!msg.equals("quit")))
{
pw = new PrintWriter(new OutputStreamWriter(mserver.s[k].getOutputStream()));
pw.println(mserver.user[n]+":"+msg+"\n");
pw.flush();
}
}
}
}
catch(Exception e)
{
}
}
}

15
Output

16
17
Data Retrieval from a Remote Database

Fig: Connection to Database

18
Server Side Program

import java.io.*;
import java.net.*;
import java.sql.*;
class rdbserver
{
public static void main(String args[])
{
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try
{
ServerSocket ssoc=new ServerSocket(1111);
System.out.println("wait for client connection:\n");
Socket csoc=ssoc.accept();
if(csoc!=null)
System.out.println("client is connected:");
BufferedReader fromc=new BufferedReader(new
InputStreamReader(csoc.getInputStream()));
PrintStream toc=new PrintStream(csoc.getOutputStream());
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String query="";
StringBuffer rset=null;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:vinod","scott","tiger");
stmt=conn.createStatement();
do
{
query=fromc.readLine();
System.out.println("client query request:"+query);
if(query.equalsIgnoreCase("quit"))
break;
rs=stmt.executeQuery(query);
ResultSetMetaData rsmd=rs.getMetaData();
int noCol=rsmd.getColumnCount();
if(rs.next())
{

19
rset=new StringBuffer("RESULT:\n");
for(int i=1;i<=noCol;i++)
rset.append(rsmd.getColumnLabel(i)+"\n");
rset.append("\n");
}
do
{
for(int i=1;i<=noCol;i++)
rset.append(rs.getString(i)+"\t");
rset.append("\n");
}
while(rs.next());
rset.append("");
toc.println(rset);
}
while(!query.equalsIgnoreCase("quit"));
conn.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}

20
Client Side Program

import java.io.*;
import java.net.*;
import java.sql.*;
public class rdbclient
{
public static void main(String args[])
{
System.out.println("connected to serverdata");
try
{
Socket soc=new Socket("localhost",1111);
PrintStream tos=new PrintStream(soc.getOutputStream());
BufferedReader froms=new BufferedReader(new
InputStreamReader(soc.getInputStream()));
BufferedReader fromkb=new BufferedReader(new
InputStreamReader(System.in));

do
{
query=fromkb.readLine();
tos.println(query);
if(query.equalsIgnoreCase("quit"))
break;
do
{
query=froms.readLine();
System.out.println(query);
}
while(!query.startsWith(""));
}
while(!query.equalsIgnoreCase("quit"));
}
catch(Exception e)
{
System.out.println(e);
}

21
}
}

Server side Output Window

Client Side output Window

22
Simple Mail Transfer Protocol
Program

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
/*** This class defines methods that display the gui and handle the sending of
*mails to the Mail server. */
public class SMTP extends WindowAdapter implements ActionListener
{
private Button sendBut = new Button("Send Message");

private Label fromLabel = new Label(" From : ");


private Label toLabel = new Label(" To : ");
private Label hostLabel = new Label("Host Name : ");
private Label subLabel = new Label(" Subject : ");

private TextField fromTxt = new TextField(25);


private TextField toTxt = new TextField(25);
private TextField subTxt = new TextField(25);
private TextField hostTxt = new TextField(25);

private TextArea msgTxt = new TextArea();

private Frame clientFrame = new Frame("SMTP Client");

public SMTP()
{
clientFrame.setLayout(new GridLayout(2,1));

Panel p1 = new Panel();


p1.setLayout(new GridLayout(4,1));

Panel p11 = new Panel();


p11.setLayout(new FlowLayout());
p11.add(hostLabel);
p11.add(hostTxt);

Panel p12 = new Panel();


p12.setLayout(new FlowLayout());
p12.add(fromLabel);
p12.add(fromTxt);

23
Panel p13 = new Panel();
p13.setLayout(new FlowLayout());
p13.add(toLabel);
p13.add(toTxt);

Panel p14 = new Panel();


p14.setLayout(new FlowLayout());
p14.add(subLabel);
p14.add(subTxt);
p1.add(p11);
p1.add(p12);
p1.add(p13);
p1.add(p14);

Panel p2 = new Panel();


p2.setLayout(new BorderLayout());
p2.add(msgTxt,BorderLayout.CENTER);

Panel p21 = new Panel();


p21.setLayout(new FlowLayout());
p21.add(sendBut);
p2.add(p21,BorderLayout.SOUTH);
clientFrame.add(p1);
clientFrame.add(p2);
clientFrame.setSize(400,500);
clientFrame.setVisible(true);
clientFrame.addWindowListener(this);
sendBut.addActionListener(this);
}
public void windowClosing(WindowEvent we)
{
clientFrame.setVisible(false);
System.exit(1);
}
public void actionPerformed(ActionEvent ae)
{
try
{
Socket s=new Socket(hostTxt.getText(),25);
BufferedReader br=new BufferedReader(new
InputStreamReader(s.getInputStream()));
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
System.out.println("Connection is established");

24
pw.println("HELLO");
System.out.println(br.readLine());
pw.println("MAIL From:"+fromTxt.getText());
System.out.println(br.readLine());
pw.println("RCPT To:"+toTxt.getText());
System.out.println(br.readLine());
pw.println("DATA");
pw.println(msgTxt.getText()+"\n.\n");
System.out.println(br.readLine());
pw.println("QUIT");
pw.flush();
s.close();
System.out.println("Mail has been sent....");
}
catch(Exception e)
{
}
System.out.println("Connection Terminated");
}
public static void main(String args[])
{
SMTP client = new SMTP();
}
}//end of SMTP class

25
Output

26
POP client
 Short for POST OFFICE PROTOCOL, a protocol used to retrieve e-mail from a
mail server. Most e-mail applications (sometimes called an e-mail client) use the
POP protocol, although some can use the newer IMAP (Internet Message Access
Protocol).
 There are two versions of POP. The first, called POP2, became a standard in the
mid-80's and requires SMTP to send messages. The newer version, POP3, can be
used with or without SMTP. POP3 uses TCP/IP port 110.
 With IMAP, all your mail stays on the server in multiple folders, some of which
you have created. This enables you to connect to any computer and see all your
mail and mail folders. In general, IMAP is great if you have a dedicated connection
to the Internet or you like to check your mail from various locations.
 With POP3 you only have one folder, the Inbox folder. When you open your
mailbox, new mail is moved from the host server and saved on your computer. If
you want to be able to see your old mail messages, you have to go back to the
computer where you last opened your mail.
 With POP3 "leave mail on server" only your email messages are on the server, but
with IMAP your email folders are also on the server.

Fig: POP3 Client Application

27
Email Services & SMTP/POP Protocols

 Post Office Protocol (POP) and Simple Mail Transfer Protocol (SMTP) are
involved in email services.
 Users use an application called a Mail User Agent (MUA), or e-mail client to
allow messages to be sent and places received messages into the client's mailbox.
 In order to receive e-mail messages from an e-mail server, the e-mail client can use
POP.
 Sending e-mail from either a client or a server uses message formats and command
strings defined by the SMTP protocol.

Fig: Mail Transfer Agent (MTA) & Mail Delivery Agent (MDA)

28
Server Side Program

import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
class pop extends JFrame implements ActionListener
{
JPanel jp;
JLabel lpadd,lpnum,lpass,lretr,luser;
JTextField padd,pnum,user,retr,del;
JPasswordField pass;
JTextArea receive;
JScrollPane scrlp;
JButton login,list,quit,retrv,dele;
Socket s;
PrintWriter pw;
BufferedReader br;
int nmesgs;
pop()
{
jp=new JPanel();
jp.setLayout(null);
lpadd=new JLabel("port address");
lpadd.setBounds(20,20,100,20);
jp.add(lpadd);
padd=new JTextField();
padd.setBounds(110,20,120,20);
jp.add(padd);
lpnum=new JLabel("port number");
lpnum.setBounds(20,40,100,20);
jp.add(lpnum);
pnum=new JTextField();
pnum.setBounds(110,40,120,20);
jp.add(pnum);
login=new JButton("login");
login.setBounds(20,100,210,20);
jp.add(login);
login.addActionListener(this);
luser=new JLabel("user name");

29
luser.setBounds(20,60,100,20);
jp.add(luser);
user=new JTextField();
user.setBounds(110,60,120,20);
jp.add(user);
lpass=new JLabel("password");
lpass.setBounds(20,80,100,20);
jp.add(lpass);
pass=new JPasswordField();
pass.setBounds(110,80,120,20);
jp.add(pass);
list=new JButton("list");
list.setBounds(20,120,210,20);
list.addActionListener(this);
jp.add(list);
retrv=new JButton("retrieve");
retrv.setBounds(130,145,130,20);
jp.add(retrv);
retrv.addActionListener(this);
dele=new JButton("delete");
dele.setBounds(130,165,130,20);
jp.add(dele);
dele.addActionListener(this);
lretr=new JLabel("enter the meg numebr");
lretr.setBounds(20,145,120,20);
jp.add(lretr);
retr=new JTextField();
retr.setBounds(100,145,30,20);
retr.addActionListener(this);
jp.add(retr);
del=new JTextField();
del.setBounds(100,165,30,20);
del.addActionListener(this);
jp.add(del);
receive=new JTextArea();
receive.setEditable(false);
scrlp=new JScrollPane(receive);
jp.add(scrlp);
scrlp.setBounds(20,200,300,200);
quit=new JButton("quit");
quit.setBounds(130,410,80,30);
jp.add(quit);
quit.addActionListener(this);
setTitle("Post Office Protocol");

30
setSize(350,470);
show();
this.getContentPane().add(jp);
setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource()==login)
{
try
{
s=new Socket(padd.getText(),Integer.parseInt(pnum.getText()));
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
receive.setText(br.readLine()+"\n");
pw.println("user"+user.getText());
receive.append(br.readLine()+"\n");
pw.println("pass"+pass.getText());
receive.append(br.readLine()+"\n");
}
catch(IOException e)
{
JOptionPane.showMessageDialog(new JPanel(),"connection cannot be
established");
}
}
if(ae.getSource()==list)
{
StringTokenizer st;
String str;
pw.println("list");
try
{
str=br.readLine();
st=new StringTokenizer(str);
st.nextToken();
str=st.nextToken();
nmesgs=Integer.parseInt(str)+1;
for(int i=0;i<nmesgs;i++)
receive.append(br.readLine()+"\n");
receive.append("no of messages :" + str + "\n");
}
catch(Exception e)
{

31
JOptionPane.showMessageDialog(new JPanel(),e);
}
}
if(ae.getSource()==retrv)
{
String k=retr.getText().trim();
pw.println("RETR \n"+k);
int l=Integer.parseInt(k);
try
{
String st=br.readLine();
if(l<nmesgs&&l>0)
{
while(!st.equals("."))
{
receive.append(st+"\n");
st=br.readLine();
}
}
else
{
receive.append(st+"\n");
}
retr.setText("");
}

catch(Exception e)
{
JOptionPane.showMessageDialog(new JPanel(),e);
}
}
if(ae.getSource()==quit)
System.exit(0);
if(ae.getSource()==dele)
{
try
{
pw.println("dele"+del.getText().trim());
nmesgs--;
del.setText("");
receive.append(br.readLine()+"\n");
}

32
catch(Exception e)
{
JOptionPane.showMessageDialog(new JPanel(),e);
}
}
}
public static void main(String args[])
{
pop p=new pop();
}
}

Client Side Program

import java.io.*;
import java.net.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class POPClient extends Frame implements ActionListener
{
TextField user,pass,host,msgno;
TextArea msgta;
Button signin,disp,prev,next,exit;
int no_of_msg,n;
String str;
BufferedReader br1,br2;
PrintWriter pw;
Socket s=null;
public POPClient()
{
super("POP");
user=new TextField(20);
pass=new TextField(20);
host=new TextField(20);
msgno=new TextField(20);
msgta=new TextArea("",10,50);
signin=new Button("LOGIN");
disp=new Button("DISPLAY");
next=new Button("NEXT");
prev=new Button("PREVIOUS");

33
exit=new Button("EXIT");
no_of_msg=0;
str=" ";
n=0;
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel();
Panel p4 = new Panel();
setLayout(new GridLayout(3,1));
setSize(400,400);
p1.setLayout(new GridLayout(4,1));
Panel p11 = new Panel();
p11.add(new Label("User Name : "));
p11.add(user);
Panel p12 = new Panel();
p12.add(new Label("Password : "));
p12.add(pass);
Panel p13 = new Panel();
p13.add(new Label("Host Name : "));
p13.add(host);
Panel p14 = new Panel();
p14.add(signin);
p1.add(p11);
p1.add(p12);
p1.add(p13);
p1.add(p14);
p3.setLayout(new GridLayout(1,1));
p3.add(msgta);
p4.setLayout(new GridLayout(3,1));
Panel p41 = new Panel();
p41.add(new Label("Enter message number :"));
p41.add(msgno);
Panel p42 = new Panel();
p42.add(disp);
p42.add(new Label(" "));
p42.add(prev);
Panel p43 = new Panel();
p43.add(next);
p43.add(new Label(" "));
p43.add(exit);
p4.add(p41);
p4.add(p42);
p4.add(p43);
add(p1);

34
add(p4);
add(p3);
setVisible(true);
pass.setEchoChar('*');
signin.addActionListener(this);
disp.addActionListener(this);
prev.addActionListener(this);
next.addActionListener(this);
exit.addActionListener(this);
}
public void actionPerformed(ActionEvent ae)
{
try
{
if(ae.getSource()==signin)
{
s=new Socket(host.getText(),110);
br1=new BufferedReader(new
InputStreamReader(s.getInputStream()));
pw=new PrintWriter(s.getOutputStream(),true);
msgta.append(br1.readLine());
System.out.println("1");
pw.println("user "+user.getText());
System.out.println("2");
msgta.append("\n"+br1.readLine());
pw.println("PASS "+pass.getText());
System.out.println("3");
msgta.append("\n"+br1.readLine());
pw.println("list");
str=br1.readLine();
msgta.append("\n"+str);
StringTokenizer st=new StringTokenizer(str);
String tmpstr=st.nextToken();
tmpstr=st.nextToken();
no_of_msg=Integer.parseInt(tmpstr);
while(!(br1.readLine().equals(".")));
}
if(ae.getSource()==disp)
{
n=Integer.parseInt(msgno.getText());
display();
}
if(ae.getSource()==next)
{

35
n++;
display();
}
if(ae.getSource()==prev)
{
n--;
display();
}
if(ae.getSource()==exit)
{
if(s!=null)
s.close();
System.out.println("Connection terminated....");
System.exit(1);
}
}
catch(Exception c)
{
System.out.println(c);
}
}
void display()
{
msgta.setText("");
msgno.setText(String.valueOf(n));
if(n>0&&n<=no_of_msg)
{
System.out.println("N:"+n);
pw.println("retr "+n);
do
{
try
{
str=br1.readLine();

36
}
catch (Exception e)
{}
System.out.println("msg"+str);
msgta.append("\n"+str);
}while(!str.equals("."));
}
else
msgta.setText("You have "+no_of_msg+" mails");
}
public static void main(String args[])
{
POPClient p=new POPClient();
}
}

37
File Transfer Protocol (FTP)
 A standard network protocol used to exchange and manipulate files over a TCP/IP-
based network, such as the Internet.
 Built on a client-server architecture and utilizes separate control and data
connections between the client and server applications.
 FTP differs from other client-server applications, it establishes two connections
between the hosts
 The first one is a data transfer connection which does Data Transfer Process (DTP)
 The other is a control information connection which interprets FTP commands
through Protocol Interpreter

Client Side Program

import java.net.*;
import java.io.*;
public class ftpclient
{
public static void main (String args[])
{
Socket s;
BufferedReader in, br;
PrintWriter pw;
String spath,dpath;
FileOutputStream fos;
int c;
try
{
s = new Socket ("localhost",1111);
in = new BufferedReader (new InputStreamReader (System.in));
br = new BufferedReader (new InputStreamReader (s.getInputStream()));
pw = new PrintWriter(s.getOutputStream(), true);
System.out.println("\nEnter Sourcepath to copy file : ");
spath = in.readLine();
System.out.println("\nEnter DestinationPath to transfer : ");
dpath = in.readLine();
fos = new FileOutputStream(dpath);
pw.println (spath);
while ((c=br.read())!=-1)

38
{
fos.write((char)c);
fos.flush();
}
System.out.println("File trasfer completed:\n");
}
catch (Exception e)
{
System.out.println(e);
}
}
}

Server Side Program

import java.net.*;
import java.io.*;
public class ftpserver
{
public static void main(String args[])
{
Socket s;
ServerSocket server;
FileInputStream fis;
BufferedReader br;
PrintWriter pw;
String filename;
int c;
try
{
server = new ServerSocket(1111);
System.out.println("Server waitfor for connection:\n");
s = server.accept();
System.out.println("Connection established:\n");
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
pw = new PrintWriter(s.getOutputStream());
filename = br.readLine();
fis = new FileInputStream(filename);
while ((c=fis.read())!=-1)
{

39
pw.print((char)c);
pw.flush();
}
System.out.println(filename + " copied to destnation");
s.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}

Output

40
Telnet
 In the very earliest days of internetworking, one of the most important problems
that computer scientists needed to solve was how to allow someone operating one
computer to access and use another as if he or she were connected to it locally. The
protocol created to meet this need was called Telnet, and the effort to develop it
was tied closely to that of the Internet and TCP/IP as a whole.
 Telnet (teletype network) is a network protocol used on the Internet or local area
networks to provide a bidirectional interactive communications facility. Typically,
telnet provides access to a command-line interface on a remote host via a virtual
terminal connection which consists of an 8-bit byte oriented data connection over
the Transmission Control Protocol.

41
Program

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

public class Telnet extends WindowAdapter implements ActionListener,KeyListener


{
public static Frame telFrame;
public static Socket s;
public static BufferedReader br = null;
public static PrintWriter pw = null;
public static Telnet tnet;
public static MenuBar mbar;
public static Menu connectMenu;
public static Menu helpMenu;
public static MenuItem connect,disconnect,exit,help;
public static TextArea msgArea;
public static TextField statusArea;
public static String command = "";

public static void main(String args[])


{
telFrame = new Frame("Telnet");
msgArea = new TextArea();
statusArea = new TextField();
Panel p = new Panel();
p.setLayout(new BorderLayout());
mbar = new MenuBar();
connectMenu = new Menu("Connect");
connectMenu.add(connect = new MenuItem("Connect"));
connectMenu.add(disconnect = new MenuItem("Disconnect"));

42
connectMenu.add(exit = new MenuItem("Exit"));
mbar.add(connectMenu);
helpMenu = new Menu("Help");
helpMenu.add(help = new MenuItem("help"));
mbar.add(helpMenu);
connect.addActionListener(new Telnet());
disconnect.addActionListener(new Telnet());
exit.addActionListener(new Telnet());
help.addActionListener(new Telnet());

msgArea.addKeyListener(new Telnet());
p.add(msgArea,BorderLayout.CENTER);
p.add(statusArea,BorderLayout.SOUTH);
telFrame.setSize(450,350);
telFrame.setMenuBar(mbar);
telFrame.add(p);
telFrame.setVisible(true);
telFrame.addWindowListener(new Telnet());
}
public void windowClosing(WindowEvent we)
{
telFrame.setVisible(false);
System.exit(0);
}
public void keyPressed(KeyEvent ke) {}
public void keyReleased(KeyEvent ke) {}
public void keyTyped(KeyEvent ke)
{
if(ke.getKeyChar() == KeyEvent.VK_ENTER)
{
System.out.println(command);
pw.println(command);
command = "";
}
else if(ke.getKeyChar() != KeyEvent.VK_SHIFT)
command = command + ke.getKeyChar();
}
public void actionPerformed(ActionEvent ae)
{
String str = ae.getActionCommand();
if(str.equals("Exit"))
System.exit(0);
if(str.equals("Connect"))
new ConnectFrame();

43
else if(str.equals("Disconnect"))
{
if(!(s==null))
{
System.out.println("in disconnecting...");
System.out.println("Connection terminated");
statusArea.setText("Connection terminated");
try
{
s.close();
s = null;
}
catch(Exception e)
{
System.out.println("closing socket.");
}
}
}
else
{
new HelpFrame();
}
}
public void makeConnection()
{
try
{
s = new
Socket(ConnectFrame.host.getText().trim(),Integer.parseInt(ConnectFrame.port.getText().
trim()));
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
pw = new PrintWriter(s.getOutputStream(),true);
statusArea.setText("Connection Established");
new ReadThrd(msgArea,statusArea,br);
}
catch(Exception e)
{
System.out.println(e);
statusArea.setText("Connection Failed");
}
}
}
class ReadThrd extends Thread
{

44
TextArea msgArea;
TextField statusArea;
BufferedReader br;
ReadThrd(TextArea msgArea,TextField statusArea,BufferedReader br)
{
super("reading data thread");
this.msgArea = msgArea;
this.statusArea = statusArea;
this.br = br;
start();
}
public void run()
{
try
{
int off = 0;
while(true)
{
String reply = br.readLine();
if(reply == null)
{
msgArea.append("\n\n--------The remote host is not responding--------
\n\n");
break;
}
msgArea.append(reply+"\n");
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
class ConnectFrame extends WindowAdapter implements ActionListener
{
Frame conFrame;
public static TextField host,port;
Button connect,cancel;
public ConnectFrame()
{
conFrame = new Frame("Connecting....");
host = new TextField(10);
port = new TextField(10);

45
connect = new Button("Connect");
cancel = new Button("Cancel");
Panel p1 = new Panel();
p1.add(new Label("Remote Host : "));
p1.add(host);
Panel p2 = new Panel();
p2.add(new Label("Port Number : "));
p2.add(port);
Panel p3 = new Panel();
p3.add(connect);
p3.add(cancel);

Panel p = new Panel();


p.setLayout(new GridLayout(3,1));
p.add(p1);
p.add(p2);
p.add(p3);
connect.addActionListener(this);
cancel.addActionListener(this);
conFrame.setSize(250,200);
conFrame.add(p);
conFrame.setVisible(true);
conFrame.addWindowListener(this);
}
public void actionPerformed(ActionEvent ae)
{
Telnet tnet = new Telnet();
String str = ae.getActionCommand();
if(str.equals("Cancel"))
conFrame.setVisible(false);
else if(str.equals("Connect"))
{
conFrame.setVisible(false);
tnet.makeConnection();
}
}
public void windowClosing(WindowEvent we)
{
conFrame.setVisible(false);
}
}
class HelpFrame extends WindowAdapter
{
Frame helpFrame;

46
public HelpFrame()
{
helpFrame = new Frame("Telnet Help");
TextArea helpTxt = new TextArea();
helpTxt.setEditable(false);
helpTxt.setText("Telnet help");
helpFrame.add(helpTxt);
helpFrame.setSize(300,400);
helpFrame.setVisible(true);
helpFrame.addWindowListener(this);
}

public void windowClosing(WindowEvent we)


{
helpFrame.setVisible(false);
}
}

47
Output

48
Trivial File Transfer Protocol (TFTP)
 Is a file transfer protocol, with the functionality of a very basic form of File
Transfer Protocol (FTP)
 It is a simple protocol to transfer files. It has been implemented on top of the User
Datagram Protocol (UDP) using port number 69.
 TFTP only reads and writes files (or mail) from/to a remote server. It cannot list
directories, and currently has no provisions for user authentication.
 TFTP supports three different transfer modes, "netascii", "octet" and "mail", with
the first two corresponding to the "ASCII" and "image" (binary) modes of the FTP
protocol, and the third was made obsolete by RFC 1350.
 TFTP is based in part on the earlier protocol EFTP, which was part of the PUP
protocol suite.
 TFTP is used to read files from, or write files to, a remote server.
 Due to the lack of security, it is dangerous over the open Internet. Thus, TFTP is
generally only used on private, local networks.
 Limitations of TFTP
o TFTP cannot list directory contents.
o TFTP has no authentication or encryption mechanisms.
o TFTP allows big data packets which may burst and cause delay in
transmission.
o TFTP cannot download files larger than 1 Terabyte.

Server Side Program

import java.io.*;
import java.net.*;
import java.lang.*;
public class tftps
{
public static void main(String args[]) throws Exception
{
DatagramSocket ds=new DatagramSocket(1500);
byte s[]=new byte[1024];
DatagramPacket dp=new DatagramPacket(s,1024);
ds.receive(dp);
String data=new String(dp.getData(),0,dp.getLength());
int count=0;
System.out.println("ENTER THE FILE NAME TO TRANFER:" +data);
FileInputStream fs=new FileInputStream (data);

49
while(fs.available()!=0)
{
if(fs.available()<1024)
count=fs.available();
);
else
count=1024;
s=new byte[count];
fs.read(s
dp=new DatagramPacket(s,s.length,InetAddress.getLocalHost(),1501);
ds.send(dp);
}
fs.close();
s=new byte[3];
s="***".getBytes();
ds.send(newDatagramPacket(s,s.length,InetAddress.getLocalHost(),1501));
ds.close();
}
}

50
Client Side Program

import java.io.*;
import java.net.*;
import java.lang.*;
public class tftpc
{
public static void main(String args[]) throws Exception
{
DatagramSocket ds=new DatagramSocket(1501);
BufferedReader input=newBufferedReader(new
InputStreamReader(System.in));
System.out.println("ENTER THE FILE NAME TO SAVE:");
String file=input.readLine();
FileOutputStream fos=new FileOutputStream(file);
System.out.println("ENTER THE FILE NAME TO TRANFER:");
file=input.readLine();
byte s[]=new byte[file.length()];
s=file.getBytes();
String data=null;
ds.send(new DatagramPacket(s,s.length,InetAddress.getLocalHost(),1500));
while(true)
{
s=new byte[1024];
DatagramPacket dp=new DatagramPacket(s,1024);
ds.receive(dp);
data=new String(dp.getData(),0,dp.getLength());
if(data.equals("***"))
break;
fos.write(data.getBytes());
}
fos.close();
ds.close();
}
}

51
Output

Server Side:

Client Side:

52
Hyper Text Transfer Protocol (HTTP)

Server Side Program

import java.io.*;
import java.net.*;
import java.lang.*;
public class https
{
public static void main(String args[]) throws Exception
{
ServerSocket ssoc=new ServerSocket(1111);
System.out.println("Server waits for client:\n");
Socket so=ssoc.accept();
System.out.println("client connected to Server :\n");
BufferedReader br=new BufferedReader(new
InputStreamReader(so.getInputStream()));
PrintWriter pw=new PrintWriter(so.getOutputStream(),true);
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
int ch;
do
{
ch=Integer.parseInt(br.readLine());
String file;
byte line[]=null;
File f;
switch(ch)
{
case 1: System.out.println("1.head");
file=br.readLine();
f=new File(file);
int index=file.lastIndexOf(".");
String type=file.substring(index+1);
pw.println(type);
long length=f.length();
pw.println(length);
break;
case 2: System.out.println("2.post");
file=br.readLine();
System.out.println("message from client:\n");
System.out.println(file);

53
break;
case 3: System.out.println("3.get");
file=br.readLine();
FileInputStream fs=new FileInputStream(file);
while(fs.available()!=0)
{
if(fs.available()<1024)
line=new byte[fs.available()];
else
line=new byte[1024];
fs.read(line);
file=new String(line);
pw.println(file);
}
pw.println("***");
fs.close();
break;
case 4: System.out.println("4.delete");
file=br.readLine();
f=new File(file);
f.delete();
break;
default: System.out.println("5.exit");
System.exit(0);
}
}while(ch<=4);
so.close();
ssoc.close();
}
}

54
Client Side Program

import java.io.*;
import java.net.*;
import java.lang.*;
public class httpc
{
public static void main(String args[]) throws Exception
{
Socket soc=new Socket("localhost",1111);
BufferedReader br=new BufferedReader(new
InputStreamReader(soc.getInputStream()));
PrintWriter pw=new PrintWriter(soc.getOutputStream(),true);
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("server is connected:\n");
int ch;
do
{
System.out.println("COMMANDS");
System.out.println("\n 1.head \n 2.post \n 3.get \n4.delete\n 5.exit");
System.out.println("ENTER UR CHOICE:");
ch=Integer.parseInt(in.readLine());
byte line[]=null;
String file;
switch(ch)
{
case 1:pw.println("1");
file=in.readLine();
pw.println(file);
String type=br.readLine();
String length=br.readLine();
System.out.println("FILE:"+file+"\nTYPE:"+type+"\nLEN GTH:"+length);
break;

case 2: pw.println("2");
System.out.println("enter text to post");
file=in.readLine();
pw.println(file);
System.out.println("text is posted at server");
break;

55
case 3:pw.println("3");
System.out.println("enter file name to get");
file=in.readLine();
pw.println(file);
System.out.println("enter file name to save:");
file=in.readLine();
FileOutputStream fs=new FileOutputStream(file);
while(true)
{
String s=br.readLine();
if(s.equals("***"))
break;
int count=s.length();
if(count<1024)
line=new byte[1024];
line=s.getBytes();
fs.write(line);
}
fs.close();
System.out.println("\n file successfully tranfered:");
break;

case 4: pw.println("4");
System.out.println("enter the file to delete:");
file=in.readLine();
pw.println(file);
System.out.println("given file deleted:");
break;
default: pw.println("5");
System.exit(0);
}
}while(ch<=4);
soc.close();
}
}

56
Output

Client Side output window

57
Server Side output window

58
Write a program to obtain the local and remote socket address

Program

import java.net.InetAddress;
import java.net.UnknownHostException;

public class LocalRemote


{
public static void main(String[] args) throws UnknownHostException
{
InetAddress address=InetAddress.getLocalHost();
System.out.println("IP address of Localhost is: "+address);

String ipaddress=address.getHostAddress();
System.out.println("IP address of Remote system is: "+ipaddress);
}
}
Output

IP address of Localhost is: Praveen/127.0.0.1

IP address of Remote system is: 127.0.0.1

59
Write a program to obtain information about

a) Host

b)Network

c)Protocol

d)Domain

Program

import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;

public class Information


{
public static void main(String[] args) throws UnknownHostException,
MalformedURLException
{
InetAddress addr=InetAddress.getLocalHost();

//HOST
System.out.println("Localhost IP: "+addr);
String ipadd=addr.getHostAddress();
System.out.println("Host IP: "+ipadd);

//DOMAIN
URL url = new URL("http://www.auce.com/index.htm?language=en#j2se");
System.out.println("Domain is: "+Information.getDomainName(url.toString()));

//PROTOCOL
System.out.println("protocol is: "+ url.getProtocol());

60
//NETWORK
System.out.println("authority is: "+ url.getAuthority());
System.out.println("file name is: " + url.getFile());
System.out.println("host is: " + url.getHost());
System.out.println("path is: " + url.getPath());
System.out.println("port is: " + url.getPort());
System.out.println("default port is: "+ url.getDefaultPort());
System.out.println("query is: " + url.getQuery());
System.out.println("ref is: " + url.getRef());
}//end of main()

public static String getDomainName(String url) throws MalformedURLException


{
if(!url.startsWith("http") && !url.startsWith("https"))
{
url = "http://" + url;
}
URL netUrl = new URL(url);
String host = netUrl.getHost();
if(host.startsWith("www"))
{
host = host.substring("www".length()+1);
}
return host;
}//end of getDomainName() method
}//end of Information class

61
Output

Localhost IP: Praveen/127.0.0.1

Host IP: 127.0.0.1

Domain is: auce.com

protocol is: http

authority is: www.auce.com

file name is: /index.htm?language=en

host is: www.auce.com

path is: /index.htm

port is: -1

default port is: 80

query is: language=en

ref is: j2se

62
Write a program to manipulate the IP address
Manipulate:
1. IP address identification
2. Validation of IP

Program

import java.net.*;
public class Manipulate{
public static void main(String args[]) throws UnknownHostException {
InetAddress addr=InetAddress.getLocalHost();
System.out.println("IP address is: "+addr);

System.out.println("Validation Status is: "+ Manipulate.isValid(addr));


}
public static boolean isValid(final String address){
boolean isVal=false;
if(address == null || address.trim().isEmpty())
return isVal;
if(InetAddressValidator.getInstance().isValid(address))
{
isVal=true;
}
else
{
try
{
isVal=InetAddress.getByName(address) instanceof Inet6Address;
}
catch(Exception e)
{
isVal=false;
}
}
return isVal;
}
}

Output

IP address is: Praveen/127.0.0.1


Validation status is: true

63

You might also like