Computernetwork
Computernetwork
Objective:
To implement socket programming date and time display from client to server using TCP
and UDP Sockets.
Learning Outcomes:
After the completion of this experiment, student will be able to Write, execute and debug
programs which use TCP Socket API. understand the use of client/server architecture in
application development Develop a client-server application by using TCP and UDP
Understand how the connection is established using a socket between a client and a server
and also understands time and date retrieval from the server.
Problem Statement:
A server program to establish the socket connection with the client.
A client program which on establishing a connection retrieves the time and date of the
system and displays it.
Concept:
Socket Programming
Sockets provide the communication mechanism between two computers. A client
program creates a socket on its end of the communication and attempts to connect that
socket to a server. When the connection is made, the server creates a socket object on its
end of the communication. The client and server can now communicate by writing to and
reading from the socket.
Client–server model
The client–server model of computing is a distributed application structure that partitions
tasks or workloads between the providers of a resource or service, called servers, and
service requesters, called clients. Often clients and servers communicate over a computer
network on separate hardware, but both client and server may reside in the same system.
A server host runs one or more server programs which share their resources with clients.
A client does not share any of its resources, but requests a server's content or service
function. Clients therefore initiate communication sessions with servers which await
incoming requests. Examples of computer applications that use the client–server model
are Email, network printing, and the World Wide Web.
Algorithm:
Server:
Step1:Create a server socket and bind it to port.
Step 2:Listen for new connection and when a connection arrives, accept it.
Step 3:Send server’s date and time to the client.
Step 4:Read client’s IP address sent by the client.
Step 5:Display the client details.
Step 6:Repeat steps 2-5 until the server is terminated.
Step 7:Close the server socket.
Client
Step1:Create a client socket and connect it to the server’s port number.
Step2:Retrieve its own IP address using built-in function.
Step3:Send its address to the server.
Step4:Display the date & time sent by the server.
Step5:Close the client socket
System and Software tools required:
Package Required : Java Compiler
Operating System : UBUNTU
Minimum Requirement : Pentium III or Pentium IV with 2GB RAM 40 GB hard disk
TCP Program:
dateserver.java
//import java packages
import java.net.*; import java.io.*; importjava.util.*;
/*… Register service on port 8020…*/
ss=new ServerSocket(8020);
/*… Wait and accept a connection…*/
s=ss.accept();
/*… Get a communication stream associated with the socket…*/
ps=new PrintStream(s.getOutputStream());
/* …To get system time…*/
Date d=new Date();
ps.println(d);
dis=new DataInputStream(s.getInputStream());
inet=dis.readLine();System.out.println("THE CLIENT SYSTEM ADDRESS IS :"+inet);
/* …This method is used to request for closing or terminating an object…*/
ps.close();}}
dateclient.java
/* …Socket class is having a constructor through this Client program can request to
server to get
connection…*/
Socket soc;
DataInputStream dis;
String sdate;
PrintStreamps;
/*…getLocalHost() method: Returns the name of the local computer…*/
InetAddressia=InetAddress.getLocalHost();
/*… Open your connection to a server, at port 8020…*/
soc=new Socket(ia,8020);
/*… Get an input file handle from the socket and read the input…*/
/*…getInputStream()-This method take the permission to write the data from client
program to
server program and server program to client program…*/
dis=new DataInputStream(soc.getInputStream());
sdate=dis.readLine();
System.out.println("THE date in the server is:"+sdate);
/* …getOutputStream()-This method is used to take the permission to read data
from client
system by the server or from the server system by the client…*/
ps=new PrintStream(soc.getOutputStream());
ps.println(ia);}
Output:
UDP Program:
Server.java
/*…import java packages…*/
import java.net.*; import java.io.*; importjava.util.*;
/*..receiving the packet from client…*/
DatagramPacketrp=new DatagramPacket(rd,rd.length); ss.receive(rp);
InetAddress ip= rp.getAddress(); int port=rp.getPort();
/*… getting system time…*/
Date d=new Date();
/*… converting it to String…*/
String time= d + "";
/*… converting that String to byte…*/
sd=time.getBytes();
/*…sending the data to the client…*/
DatagramPacketsp=new DatagramPacket(sd,sd.length,ip,port);
ss.send(sp);
Clientnew.java
/*…send the data to the server(data,length,ip address and port number)…*/
DatagramPacketsp=new DatagramPacket(sd,sd.length,ip,1234);
DatagramPacketrp=new DatagramPacket(rd,rd.length);
/*…To Send the data…*/
cs.send(sp); cs.receive(rp);
String time=new String(rp.getData()); System.out.println(time);
/*…This method is used to request for closing or terminating an object…*/
cs.close(); } }
Output:
EXPERIMENT 3:
WRITE A CODE SIMULATING ARP /RARP PROTOCOLS.
OBJECTIVE:
To write a java program for simulating arp/rarp protocols
ALGORITHM:
server
1. Create a server socket and bind it to port.
2. Listen for new connection and when a connection arrives, accept it.
3. Send server‟s date and time to the client.
4. Read client‟s IP address sent by the client.
5. Display the client details.
6. Repeat steps 2-5 until the server is terminated.
7. Close all streams.
8. Close the server socket.
9. Stop.
Client
1. Create a client socket and connect it to the server‟s port number.
2. Retrieve its own IP address using built-in function.
3. Send its address to the server.
4. Display the date & time sent by the server.
5. Close the input and output streams.
6. Close the client socket.
7. Stop.
Client:
import java.io.*;
import java.net.*;
import java.util.*;
class Clientarp
{
public static void main(String args[])
{
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
Socket clsct=new Socket("127.0.0.1",139);
DataInputStream din=new DataInputStream(clsct.getInputStream());
DataOutputStream dout=new DataOutputStream(clsct.getOutputStream());
System.out.println("Enter the Logical address(IP):");
String str1=in.readLine();
dout.writeBytes(str1+'\n');
String str=din.readLine();
System.out.println("The Physical Address is: "+str);
clsct.close();
}
catch (Exception e)
{
System.out.println(e);
}
}
}
Server:
import java.io.*;
import java.net.*;
import java.util.*;
class Serverarp
{
public static void main(String args[])
{
try
{
ServerSocket obj=new ServerSocket(139);
Socket obj1=obj.accept();
while(true)
{
DataInputStream din=new DataInputStream(obj1.getInputStream());
DataOutputStream dout=new DataOutputStream(obj1.getOutputStream());
String str=din.readLine();
String ip[]={"165.165.80.80","165.165.79.1"};
String mac[]={"6A:08:AA:C2","8A:BC:E3:FA"};
for(int i=0;i<ip.length;i++)
{
if(str.equals(ip[i]))
{
dout.writeBytes(mac[i]+'\n');
break;
}
}
obj.close();
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
Output:
E:\networks>java Serverarp
E:\networks>java Clientarp
Enter the Logical address(IP):
165.165.80.80
The Physical Address is: 6A:08:AA:C2
(ii)Program for Reverse Address Resolutuion Protocol (RARP) using UDP
Client:
import java.io.*;
import java.net.*;
import java.util.*;
class Clientrarp12
{
public static void main(String args[])
{
try
{
DatagramSocket client=new DatagramSocket();
InetAddress addr=InetAddress.getByName("127.0.0.1");
byte[] sendbyte=new byte[1024];
byte[] receivebyte=new byte[1024];
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the Physical address (MAC):");
String str=in.readLine();
sendbyte=str.getBytes();
DatagramPacket sender=new
DatagramPacket(sendbyte,sendbyte.length,addr,1309);
client.send(sender);
DatagramPacket receiver=new DatagramPacket(receivebyte,receivebyte.length);
client.receive(receiver);
String s=new String(receiver.getData());
System.out.println("The Logical Address is(IP): "+s.trim());
client.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
Server:
import java.io.*;
import java.net.*;
import java.util.*;
class Serverrarp12
{
public static void main(String args[])
{
try
{
DatagramSocket server=new DatagramSocket(1309);
while(true)
{
byte[] sendbyte=new byte[1024];
byte[] receivebyte=new byte[1024];
DatagramPacket receiver=new
DatagramPacket(receivebyte,receivebyte.length);
server.receive(receiver);
String str=new String(receiver.getData());
String s=str.trim();
//System.out.println(s);
InetAddress addr=receiver.getAddress();
int port=receiver.getPort();
String ip[]={"165.165.80.80","165.165.79.1"};
String mac[]={"6A:08:AA:C2","8A:BC:E3:FA"};
for(int i=0;i<ip.length;i++)
{
if(s.equals(mac[i]))
{
sendbyte=ip[i].getBytes();
DatagramPacket sender=new
DatagramPacket(sendbyte,sendbyte.length,addr,port);
server.send(sender);
break;
}
}
break;
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
Output:
I:\ex>java Serverrarp12
I:\ex>java Clientrarp12
Enter the Physical address (MAC):
6A:08:AA:C2
The Logical Address is(IP): 165.165.80.80
EXPERIMENT 4:
WRITE A CODE SIMULATING “PING” AND “TRACEROUTE”
COMMANDS.
OBJECTIVE:
To Write The java program for simulating ping and traceroute commands.
Concept:
PING Command
The ping command is a very common method for troubleshooting the accessibility of
devices.
It uses a series of Internet Control Message Protocol (ICMP) Echo messages to
determine:
1. Whether a remote host is active or inactive.
2. The round-trip delay in communicating with the host.
3. Packet loss.
The ping command first sends an echo request packet to an address, and then waits for
a reply.
The ping is successful only if:
1. the echo request gets to the destination, and
2. The destination is able to get an echo reply back to the source within a
predetermined time called a timeout. The default value of this timeout is two seconds
on Cisco routers.
TRACEROUTE Command
1. The trace route command is used to discover the routes that packets actually take
when traveling to their destination. The device (for example, a router or a PC) sends
out a sequence of User Datagram Protocol (UDP) data grams to an invalid port
address at the remote host.
2. Three data grams are sent, each with a Time-To-Live (TTL) field value set to one.
The TTL value of 1 causes the datagram to "timeout" as soon as it hits the first router
in the path; this router then responds with an ICMP Time Exceeded Message (TEM)
indicating that the datagram has expired.
3. Another three UDP messages are now sent, each with the TTL value set to 2, which
causes the second router to return ICMP TEMs. This process continues until the
packets actually reach the other destination.
4. Since these data grams are trying to access an invalid port at the destination host,
ICMP Port Unreachable Messages are returned, indicating an unreachable port; this
event signals the Trace route program that it is finished.
ALGORITHM:
1.Start the program.
2.Get the frame size from the user
3.To create the frame based on the user request.
4.To send frames to server from the client side.
5.If your frames reach the server it will send ACK signal to client otherwise it will
send NACK signal to client.
6.Stop the program
Program:
//pingclient.java
import java.io.*;
import java.net.*;
import java.util.Calendar;
class pingclient
{
public static void main(String args[])throws Exception
{
String str;
int c=0;
long t1,t2;
Socket s=new Socket("127.0.0.1",5555);
DataInputStream dis=new DataInputStream(s.getInputStream());
PrintStream out=new PrintStream(s.getOutputStream());
while(c<4)
{
t1=System.currentTimeMillis();
str="Welcome to network programming world";
out.println(str);
System.out.println(dis.readLine());
t2=System.currentTimeMillis();
System.out.println(";TTL="+(t2-t1)+"ms");
c++;
}
s.close();
}
}
//pingserver.java
import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;
class pingserver
{
public static void main(String args[])throws Exception
{
ServerSocket ss=new ServerSocket(5555);
Socket s=ss.accept();
int c=0;
while(c<4)
{
DataInputStream dis=new DataInputStream(s.getInputStream());
PrintStream out=new PrintStream(s.getOutputStream());
String str=dis.readLine();
out.println("Reply from"+InetAddress.getLocalHost()+";Length"+str.length());
c++;
}
s.close(); } }
Output :
EXPERIMENT 5:
CREATE A SOCKET FOR HTTP FOR WEB PAGE UPLOAD AND
DOWNLOAD.
OBJECTIVE:
To write a java program for socket for HTTP for web page upload and download .
Algorithm
1.Start the program.
2.Get the frame size from the user
3.To create the frame based on the user request.
4.To send frames to server from the client side.
5.If your frames reach the server it will send ACK signal to client otherwise it will
send NACK signal to client.
6.Stop the program
Program :
//CLIENT CLASS
import javax.swing.*;
import java.net.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Client{
public static void main(String args[]) throws Exception{
Socket soc;
BufferedImage img = null;
soc=new Socket("localhost",4000);
System.out.println("Client is running. ");
try {
System.out.println("Reading image from disk. ");
img = ImageIO.read(new File("digital_image_processing.jpg"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "jpg", baos);
baos.flush();
byte[] bytes = baos.toByteArray();
baos.close();
System.out.println("Sending image to server. ");
OutputStream out = soc.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeInt(bytes.length);
dos.write(bytes, 0, bytes.length);
System.out.println("Image sent to server. ");
dos.close();
out.close();
}catch (Exception e) {
System.out.println("Exception: " + e.getMessage());
soc.close();
}
soc.close();
}
}
//SERVER CLASS
import java.net.*;
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;
class Server {
public static void main(String args[]) throws Exception{
ServerSocket server=null;
Socket socket;
server=new ServerSocket(4000);
System.out.println("Server Waiting for image");
socket=server.accept();
System.out.println("Client connected.");
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
int len = dis.readInt();
System.out.println("Image Size: " + len/1024 + "KB");
byte[] data = new byte[len];
dis.readFully(data);
dis.close();
in.close();
InputStream ian = new ByteArrayInputStream(data);
BufferedImage bImage = ImageIO.read(ian);
JFrame f = new JFrame("Server");
ImageIcon icon = new ImageIcon(bImage);
JLabel l = new JLabel();
l.setIcon(icon);
f.add(l);
f.pack();
f.setVisible(true); } }
Output
When you run the client code, following output screen would appear on client side.
EXPERIMENT 6:
WRITE A PROGRAM TO IMPLEMENT RPC (REMOTE PROCEDURE
CALL)
(i) In RPC, the sender makes a request in the form of a procedure, function, or method
call. RPC translates these calls into requests sent over the network to the intended
destination.
(ii) The RPC recipient then processes the request based on the procedure name and
argument list, sending a response to the sender when complete.
(iii) The process is initiated by the client, which sends a request message to a known
remote server to execute a specified procedure with supplied parameters.
(iv) The remote server sends a response to the client, and the application continues its
process.
(v) While the server is processing the call, the client is blocked, it waits until the
server has finished processing before resuming execution.
ALGORITHM
Server:
Step 1: Start the program
Step 2: Create a socket with address family AF_INET type
SOCK_STREAM and default protocol.
Step 3: Initialize a socket and set its attributes.
Step 4: Bind the server to the socket using bind function.
Step 5: wait for the client request, on request establish a connection
using accept function.
Step 6: Read the number from the client by using
read method Step 7: Display the no.
Step 8: add the digits of a given number.
Step 9: send the result to the client by using
write method Step 10: stop the program.
Client:
Step 1: start.
Step 2: create a socket with address family.
Step 3: Initialize the socket and set its attributes set the
required port no. Step 4: Type AF_INET socket with default
protocol.
Step 5: Connect to server using connect function to initiate
the request. Step 6: send a no to the server using write
method.
Step 7: receive the result using
read method. Step 8: stop
PROGRAM:
//Client.java
import java.io.*;
import java.net.*;
import java.util.*;
class Clientrpc
{
public static void main(String args[])
{
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
Socket clsct=new Socket("127.0.0.1",139);
DataInputStream din=new DataInputStream(clsct.getInputStream());
DataOutputStream dout=new DataOutputStream(clsct.getOutputStream());
System.out.println("Enter String");
String str=in.readLine();
dout.writeBytes(str+'\n');
clsct.close();
}
catch (Exception e)
{
System.out.println(e);
}
}
}
//Server.java
import java.io.*;
import java.net.*;
import java.util.*;
class Serverrpc
{
public static void main(String args[])
{
try
{
ServerSocket obj=new ServerSocket(139);
while(true)
{
Socket obj1=obj.accept();
DataInputStream din=new DataInputStream(obj1.getInputStream());
DataOutputStream dout=new DataOutputStream(obj1.getOutputStream());
String str=din.readLine();
Process p=Runtime.getRuntime().exec(str);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
OUTPUT
Server
Y:\networks\remote>java Serverrpc
Client
Y:\networks\remote>java Clientrpc
Enter String calc
Result :
Thus the program was implementing to implement RPC (remote procedure call)
RESULT:
Thus the Java-Program to implement Client - Server Communication using RPC was
executed and output verified using various samples.
EXPERIMENT 7:
IMPLEMENTATION OF SUBNETTING.
OBJECTIVE:
Write a program to implement subnetting and find the subnet masks.
Algorithm :
Step 1: Get the input from the user by using scanner method.
Step 2: Read the input by using nextLine() and store it.
Step 3: Split the string based on string by using split(“\\”)
Step 4 : Convert it into binary.
Step 5: calculating the network mask by using math and logarithmic
Step 6: get the first address by ANDding the last n bits with 0.
Step 7: get the last address by ANDding the last n bits with 1.
Program
import java.util.Scanner;
class Subnet{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
System.out.print(“Enter the ip address: “);
String ip = sc.nextLine();
String split_ip[] = ip.split(“\\.”); //SPlit the string after every .
String split_bip[] = new String[4]; //split binary ip
String bip = “”;
for(int i=0;i<4;i++){
split_bip[i] = appendZeros(Integer.toBinaryString(Integer.parseInt(split_ip[i]))); //
“18” => 18 => 10010 => 00010010
bip += split_bip[i];
}
System.out.println(“IP in binary is “+bip);
System.out.print(“Enter the number of addresses: “);
int n = sc.nextInt();
//Calculation of mask
int bits = (int)Math.ceil(Math.log(n)/Math.log(2)); /*eg if address = 120, log 120/log
2 gives log to the base 2 => 6.9068, ceil gives us upper integer */
System.out.println(“Number of bits required for address = “+bits);
int mask = 32-bits;
System.out.println(“The bits for subnet mask is = “+mask);
//Calculation of first address and last address
int fbip[] = new int[32];
for(int i=0; i<32;i++) fbip[i] = (int)bip.charAt(i)-48; //convert cahracter 0,1 to integer
0,1
for(int i=31;i>31-bits;i–)//Get first address by ANDing last n bits with 0
fbip[i] &= 0;
String fip[] = {“”,””,””,””};
for(int i=0;i<32;i++)
fip[i/8] = new String(fip[i/8]+fbip[i]);
System.out.print(“First address is = “);
for(int i=0;i<4;i++){
System.out.print(Integer.parseInt(fip[i],2));
if(i!=3) System.out.print(“.”);
}
System.out.println();
int lbip[] = new int[32];
for(int i=0; i<32;i++) lbip[i] = (int)bip.charAt(i)-48; //convert cahracter 0,1 to integer
0,1
for(int i=31;i>31-bits;i–)//Get last address by ORing last n bits with 1
lbip[i] |= 1;
String lip[] = {“”,””,””,””};
for(int i=0;i<32;i++)
lip[i/8] = new String(lip[i/8]+lbip[i]);
System.out.print(“Last address is = “);
for(int i=0;i<4;i++){
System.out.print(Integer.parseInt(lip[i],2));
if(i!=3) System.out.print(“.”);
}
System.out.println();
}
static String appendZeros(String s){
String temp = new String(“00000000”);
return temp.substring(s.length())+ s;
}
}
Output:
OBJECTIVE
To write a java program for applications using TCP Sockets Links
Algorithm
1.Start the program.
2.Get the frame size from the user
3.To create the frame based on the user request.
4.To send frames to server from the client side.
5.If your frames reach the server it will send ACK signal to client otherwise it will
send NACK signal to client.
6.Stop the program
Program :
//echo client.java
import java.io.*;
import java.net.*;
import java.util.*;
public class echoclient
{
public static void main(String args[])throws Exception
{
Socket c=null;
DataInputStream usr_inp=null;
DataInputStream din=new DataInputStream(System.in);
DataOutputStream dout=null;
try
{
c=new Socket("127.0.0.1",5678);
usr_inp=new DataInputStream(c.getInputStream());
dout=new DataOutputStream(c.getOutputStream());
}
catch(IOException e)
{
}
if(c!=null || usr_inp!=null || dout!=null)
{
String unip;
while((unip=din.readLine())!=null)
{
dout.writeBytes(""+unip);
dout.writeBytes("\n");
System.out.println("\n the echoed message");
System.out.println(usr_inp.readLine());
System.out.println("\n enter your message");
}
System.exit(0);
}
din.close();
usr_inp.close();
c.close();
}
}
//echoserver.java
import java.io.*;
import java.net.*;
public class echoserver
{
public static void main(String args[])throws Exception
{
ServerSocket m=null;
Socket c=null;
DataInputStream usr_inp=null;
DataInputStream din=new DataInputStream(System.in);
DataOutputStream dout=null;
try
{
m=new ServerSocket(5678);
c=m.accept();
usr_inp=new DataInputStream(c.getInputStream());
dout=new DataOutputStream(c.getOutputStream());
}
catch(IOException e)
{}
if(c!=null || usr_inp!=null)
{
String unip;
while(true)
{
System.out.println("\nMessage from Client...");
String m1=(usr_inp.readLine());
System.out.println(m1);
dout.writeBytes(""+m1);
dout.writeBytes("\n");
}
}
dout.close();
usr_inp.close();
c.close();
}
}
Output :
Refer to Experiment 17.
b. Chat
Algorithm:
Server
Step1: Start the program and create server and client sockets.
Step2: Use input streams to get the message from user.
Step3: Use output streams to send message to the client.
Step4: Wait for client to display this message and write a new one to be displayed by
the server.
Step5: Display message given at client using input streams read from socket.
Step6: Stop the program.
Client
Step1: Start the program and create a client socket that connects to the required host
and port.
Step2: Use input streams read message given by server and print it.
Step3: Use input streams; get the message from user to be given to the server.
Step4: Use output streams to write message to the server.
Step5: Stop the program.
//talkclient.java
import java.io.*;
import java.net.*;
public class talkclient
{
public static void main(String args[])throws Exception
{
Socket c=null;
DataInputStream usr_inp=null;
DataInputStream din=new DataInputStream(System.in);
DataOutputStream dout=null;
try
{
c=new Socket("127.0.0.1",1234);
usr_inp=new DataInputStream(c.getInputStream());
dout=new DataOutputStream(c.getOutputStream());
}
catch(IOException e)
{}
if(c!=null || usr_inp!=null || dout!=null)
{
String unip;
System.out.println("\nEnter the message for server:");
while((unip=din.readLine())!=null)
{
dout.writeBytes(""+unip);
dout.writeBytes("\n");
System.out.println("reply");
System.out.println(usr_inp.readLine());
System.out.println("\n enter your message:");
}
System.exit(0);
}
din.close();
usr_inp.close();
c.close();
}
}
//talkserver.java
import java.io.*;
import java.net.*;
public class talkserver
{
public static void main(String args[])throws Exception
{
ServerSocket m=null;
Socket c=null;
DataInputStream usr_inp=null;
DataInputStream din=new DataInputStream(System.in);
DataOutputStream dout=null;
try
{
m=new ServerSocket(1234);
c=m.accept();
usr_inp=new DataInputStream(c.getInputStream());
dout=new DataOutputStream(c.getOutputStream());
}
catch(IOException e)
{}
if(c!=null||usr_inp!=null)
{
String unip;
while(true)
{
System.out.println("\nmessage from client:");
String m1=usr_inp.readLine();
System.out.println(m1);
System.out.println("enter your message:");
unip=din.readLine();
dout.writeBytes(""+unip);
dout.writeBytes("\n");
}
}
dout.close();
usr_inp.close();
c.close();
}
}
OUTPUT:
Refer to Experiment 17.
c. File Transfer
Algorithm:
Server
Step1: Import java packages and create class file server.
Step2: Create a new server socket and bind it to the port.
Step3: Accept the client connection
Step4: Get the file name and stored into the BufferedReader.
Step5: Create a new object class file and realine.
Step6: If file is exists then FileReader read the content until EOF is reached.
Step7: Stop the program.
Client
Step1: Import java packages and create class file server.
Step2: Create a new server socket and bind it to the port.
Step3: Now connection is established.
Step4: The object of a BufferReader class is used for storing data content which has been
retrieved from socket object.
Step5: The content of file is displayed in the client window and the connection is closed.
Step6: Stop the program.
Program
//File Client
import java.io.*;
import java.net.*;
import java.util.*;
class Clientfile
{ public static void main(String args[])
{
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
Socket clsct=new Socket("127.0.0.1",139);
DataInputStream din=new DataInputStream(clsct.getInputStream());
DataOutputStream dout=new DataOutputStream(clsct.getOutputStream());
System.out.println("Enter the file name:");
String str=in.readLine();
dout.writeBytes(str+'\n');
System.out.println("Enter the new file name:");
String str2=in.readLine();
String str1,ss;
FileWriter f=new FileWriter(str2);
char buffer[];
while(true)
{ str1=din.readLine();
if(str1.equals("-1")) break;
System.out.println(str1);
buffer=new char[str1.length()];
str1.getChars(0,str1.length(),buffer,0);
f.write(buffer);
}
f.close();
clsct.close();
}
catch (Exception e)
{
System.out.println(e);
}
}
}
Server
import java.io.*;
import java.net.*;
import java.util.*;
class Serverfile
{ public static void main(String args[])
{
Try
{
ServerSocket obj=new ServerSocket(139);
while(true)
{
Socket obj1=obj.accept();
DataInputStream din=new DataInputStream(obj1.getInputStream());
DataOutputStream dout=new DataOutputStream(obj1.getOutputStream());
String str=din.readLine();
FileReader f=new FileReader(str);
BufferedReader b=new BufferedReader(f);
String s;
while((s=b.readLine())!=null)
{ System.out.println(s);
dout.writeBytes(s+'\n');
}
f.close();
dout.writeBytes("-1\n");
}}
catch(Exception e)
{ System.out.println(e);}
}
}
Output:
File content
Computer networks
jhfcgsauf
jbsdava
jbvuesagv
client end:
Enter the file name:sample.txt
Server response:
Computer networks
jhfcgsauf
jbsdava
jbvuesagv
client end:
Enter the new file name: net.txt
Computer networks
jhfcgsauf
jbsdava
jbvuesagv
Destination file
Computer networks
jhfcgsauf
jbsdava
jbvuesagv
EXPERIMENT 9:
APPLICATIONS USING TCP AND UDP SOCKETS LIKE ,
A. DNS
B. SNMP
C. FILE TRANSFER
a. DNS
OBJECTIVE
To write a java program for DNS application program
Algorithm
1.Start the program.
2.Get the frame size from the user
3.To create the frame based on the user request.
4.To send frames to server from the client side.
5.If your frames reach the server it will send ACK signal to client otherwise it will
send NACK signal to client.
6.Stop the program
Program
Udpdnsserver
java import java.io.*;
import java.net.*;
public class udpdnsserver
{
private static int indexOf(String[] array, String str)
{
str = str.trim();
for (int i=0; i < array.length; i++)
{
if (array[i].equals(str)) return i;
}
return -1;
}
public static void main(String arg[])throws IOException
{
String[] hosts = {"yahoo.com", "gmail.com","cricinfo.com", "facebook.com"};
String[] ip = {"68.180.206.184", "209.85.148.19","80.168.92.140", "69.63.189.16"};
System.out.println("Press Ctrl + C to Quit");
while (true)
{
DatagramSocket serversocket=new DatagramSocket(1362);
byte[] senddata = new byte[1021];
byte[] receivedata = new byte[1021];
DatagramPacket recvpack = new DatagramPacket
(receivedata, receivedata.length);
serversocket.receive(recvpack);
String sen = new String(recvpack.getData());
InetAddress ipaddress = recvpack.getAddress();
int port = recvpack.getPort();
String capsent;
System.out.println("Request for host " + sen);
if(indexOf (hosts, sen) != -1)
capsent = ip[indexOf (hosts, sen)];
else capsent = "Host Not Found";
senddata = capsent.getBytes();
DatagramPacket pack = new DatagramPacket
(senddata, senddata.length,ipaddress,port);
serversocket.send(pack);
serversocket.close();
}
}
}
Server
$ javac udpdnsserver.java $ java udpdnsserver Press Ctrl + C to Quit Request for host
yahoo.com Request for host cricinfo.com Request for host youtube.com
Client
$ javac udpdnsclient.java $ java udpdnsclient Enter the hostname : yahoo.com IP
Address:
68.180.206.184 $ java udpdnsclient Enter the hostname : cricinfo.com IP Address:
80.168.92.140 $ java udpdnsclient Enter the hostname : youtube.com IP Address:
Host Not
Found
b. SNMP
OBJECTIVE
To write a java program for SNMP application program
Algorithm
1.Start the program.
2.Get the frame size from the user
3.To create the frame based on the user request.
4.To send frames to server from the client side.
5.If your frames reach the server it will send ACK signal to client otherwise it will
send NACK signal to client.
6.Stop the program
Program
import java.io.IOException;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.Target;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class SNMPManager {
Snmp snmp = null;
String address = null;
* Constructor
* @param
add
*/
public SNMPManager(String add)
{
address = add;
public static void main(String[] args) throws IOException {
/**
* Port 161 is used for Read and Other operations
* Port 162 is used for the trap generation
*/
SNMPManager client = new SNMPManager("udp:127.0.0.1/161");
client.start();
/**
* OID - .1.3.6.1.2.1.1.1.0 => SysDec
* OID - .1.3.6.1.2.1.1.5.0 => SysName
* => MIB explorer will be usefull here, as discussed in previous article
*/
String sysDescr = client.getAsString(new OID(".1.3.6.1.2.1.1.1.0"));
System.out.println(sysDescr);
}
/**
* get any answers because the communication is asynchronous
* and the listen() method listens for answers.
* @throws IOException
*/
private void start() throws IOException {
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new
Snmp(transport);
// Do not forget this line!
transport.listen();
}
/**
* Method which takes a single OID and returns the response from the agent as a
String.
* @param oid
* @return
* @throws IOException
*/
public String getAsString(OID oid) throws IOException {
ResponseEvent event = get(new OID[] { oid });
return event.getResponse().get(0).getVariable().toString();
}
/**
* This method is capable of handling multiple OIDs
* @param oids
* @return
* @throws IOException
*/
public ResponseEvent get(OID oids[]) throws IOException {
PDU pdu = new PDU();
for (OID oid : oids) {
pdu.add(new VariableBinding(oid));
}
pdu.setType(PDU.GET);
ResponseEvent event = snmp.send(pdu, getTarget(), null);
if(event != null) {
return event;
}
throw new RuntimeException("GET timed out");
}
/**
* This method returns a Target, which contains information about
* where the data should be fetched and how.
* @return
*/
private Target getTarget() {
Address targetAddress = GenericAddress.parse(address);
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(1500);
target.setVersion(SnmpConstants.version2c);
return target;
}
}
OUT PUT
Hardware: x86 Family 6 Model 23 Stepping 10 AT/AT COMPATIBLE – Software:
Windows
2000 Version 5.1 (Build 2600 Multiprocessor Free)
b. File Transfer
OBJECTIVE
To write a java program for FTP using TCP and UDP Sockets Liks
Program
File Client
import java.io.*;
import java.net.*;
import java.util.*;
class Clientfile
{ public static void main(String args[])
{
Try
{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
Socket clsct=new Socket("127.0.0.1",139);
DataInputStream din=new DataInputStream(clsct.getInputStream());
DataOutputStream dout=new DataOutputStream(clsct.getOutputStream());
System.out.println("Enter the file name:");
String str=in.readLine();
dout.writeBytes(str+'\n');
System.out.println("Enter the new file name:");
String str2=in.readLine();
String str1,ss;
FileWriter f=new FileWriter(str2);
char buffer[];
while(true)
{ str1=din.readLine();
if(str1.equals("-1")) break;
System.out.println(str1);
buffer=new char[str1.length()];
str1.getChars(0,str1.length(),buffer,0);
f.write(buffer);
}
f.close();
clsct.close();
}
catch (Exception e)
{
System.out.println(e);
}
}
}
Server
import java.io.*;
import java.net.*;
import java.util.*;
class Serverfile
{ public static void main(String args[])
{
Try
{
ServerSocket obj=new ServerSocket(139);
while(true)
{
Socket obj1=obj.accept();
DataInputStream din=new DataInputStream(obj1.getInputStream());
DataOutputStream dout=new DataOutputStream(obj1.getOutputStream());
String str=din.readLine();
FileReader f=new FileReader(str);
BufferedReader b=new BufferedReader(f);
String s;
while((s=b.readLine())!=null)
{ System.out.println(s);
dout.writeBytes(s+'\n');
}
f.close();
dout.writeBytes("-1\n");
}}
catch(Exception e)
{ System.out.println(e);}
}
}
Output
File content
Computer networks
jhfcgsauf
jbsdava
jbvuesagv
client
Enter the file name:
sample.txt
server
Computer networks
jhfcgsauf
jbsdava
jbvuesagv
client
Enter the new file name:
net.txt
Computer networks
jhfcgsauf
jbsdava
jbvuesagv
Destination file
Computer networks
jhfcgsauf
jbsdava
jbvuesagv
EXPERIMENT 10:
STUDY OF NETWORK SIMULATOR (NS) AND SIMULATION OF
CONGESTION CONTROL ALGORITHMS USING NS.
OBJECTIVE:
To Study of Network simulator (NS) and Simulation of Congestion Control
Algorithms using NS.
NS Functionalities
Routing, Transportation, Traffic sources,Queuing disciplines, QoS
Wireless
Ad hoc routing, mobile IP, sensor-MAC Tracing, visualization and various utilitie NS
(Network Simulators) Most of the commercial simulators are GUI driven, while
some Network simulators are CLI driven. The network model / configuration
describes the state of the network (nodes,routers, switches, links) and the events (data
transmissions, packet error etc.). An important output of simulations are the trace files.
Trace files log every packet, every event that occurred in the simulation and are used
for analysis. Network simulators can also provide other tools to facilitate visual
analysis of trends and potential trouble spots.
Most network simulators use discrete event simulation, in which a list of pending
"events" is stored, and those events are processed in order, with some events
triggering future events—such as the event of the arrival of a packet at one node
triggering the event of the arrival of that packet at a downstream node.
Simulation of networks is a very complex task. For example, if congestion is high, the
nestimation of the average occupancy is challenging because of high variance. To
estimate the likelihood of a buffer overflow in a network, the time required for an
accurate answer can be extremely large. Specialized techniques such as "control
variates" and "importance sampling" have been developed to speed simulation.
Packet loss
Occurs when one or more packets of data travelling across a computer network fail to
reach their destination. Packet loss is distinguished as one of the three main error
types encountered in digital communications; the other two being bit error and
spurious packets caused due to noise.
Packets can be lost in a network because they may be dropped when a queue in the
network node overflows. The amount of packet loss during the steady state is another
important property of a congestion control scheme. The larger the value of packet loss,
the more difficult it is for transport layer protocols to maintain high bandwidths, the
sensitivity to loss of individual packets, as well as to frequency and patterns of loss
among longer packet sequences is strongly dependent on the application itself.
Throughput
This is the main performance measure characteristic, and most widely used.
In communication networks, such as Ethernet or packet radio, throughput or network
through put is the average rate of successful message delivery over a communication
channel. The throughput is usually measured in bits per second (bit/s orbps), and
sometimes in data packets per second or data packets per time slot This measure how
soon the receiver is able to get a certain amount of data send by the sender. It is
determined as the ratio of the total data received to the end to end delay. Throughput
is an important factor which directly impacts the network performance.
Delay
Delay is the time elapsed while a packet travels from one point e.g., source premise or
network ingress to destination premise or network degrees. The larger the value of
delay, the more difficult it is for transport layer protocols to maintain high bandwidths.
We will calculate end to end delay.
Queue Length
A queuing system in networks can be described as packets arriving for service,
waiting for service if it is not immediate, and if having waited for service, leaving the
system after being served. Thus queue length is very important characteristic to
determine that how well the active queue management of the congestion control
algorithm has been working.
EXPERIMENT 11:
PERFORM A CASE STUDY ABOUT THE DIFFERENT ROUTING
ALGORITHMS TO SELECT THE NETWORK PATH WITH ITS OPTIMUM
AND ECONOMICAL DURING DATA TRANSFER.
I. LINK STATE ROUTING
II. FLOODING
III. DISTANCE VECTOR
OBJECTIVE:
To study the link state routing flooding and distance vector routing.
Algorithm
There are several variants of flooding algorithm. Most work roughly as follows:
1. Each node acts as both a transmitter and a receiver.
2. Each node tries to forward every message to every one of its neighbours except the
source node. This results in every message eventually being delivered to all reachable
parts of the network. Algorithms may need to be more complex than this, since, in
some case, precautions have to be taken to avoid wasted duplicate deliveries and
infinite loops, and to allow messages to eventually expire from the system. A variant
of flooding called selective flooding partially addresses these issues by only sending
packets to routers in the same direction. In selective flooding the routers don't send
every incoming packet on every line but only on those lines which are going
approximately in the right direction.
Advantages
Packet can be delivered, it will (probably multiple times). Since flooding naturally
utilizes every path through the network, it will also use the shortest path. This
algorithm is very simple to implement.
Disadvantages
Flooding can be costly in terms of wasted bandwidth. While a message may only have
one destination it has to be sent to every host. In the case of a ping flood or a denial of
service attack, it can be harmful to the reliability of a computer network.Messages can
become duplicated in the network further increasing the load on the networks
bandwidth as well as requiring an increase in processing complexity to disregard
duplicate messages.Duplicate packets may circulate forever, unless certain
precautions are taken. Use a hop count or a time to live count and include it with each
packet. This value should take into account the number of nodes that a packet may
have to pass through on the way to its destination.Have each node keep track of every
packet seen and only forward each packet once Enforce a network topology without
loops.
III) DISTANCE VECTOR ROUTING PROTOCOL USING NS2
Method
Routers using distance-vector protocol do not have knowledge of the entire path to a
destination.
Instead they use two methods:
1. Direction in which router or exit interface a packet should be forwarded.
2. Distance from its destination
Distance-vector protocols are based on calculating the direction and distance to any
link in a network.
"Direction" usually means the next hop address and the exit interface. "Distance" is a
measure of the cost to reach a certain node. The least cost route between any two
nodes is the route with minimum distance. Each node maintains a vector (table) of
minimum distance to every node. The cost of reaching a destination is calculated
using various route metrics. RIP uses the hop count of the destination whereas IGRP
takes into account other information such as node delay and available bandwidth.
Updates are performed periodically in a distance-vector protocol where all or part of a
router's routing table is sent to all its neighbors that are configured to use the same
distance-vector routing protocol. RIP supports cross-platform distance vector routing
whereas IGRP is a Cisco Systems proprietary distance vector routing protocol. Once a
router has this information it is able to amend its own routing table to reflect
the changes and then inform its neighbors of the changes. This process has been
described as routing by rumor‘ because routers are relying on the information they
receive from other routers and cannot determine if the information is actually valid
and true. There are a number of features which can be used to help with instability
and inaccurate routing information.
EGP and BGP are not pure distance-vector routing protocols because a distance-
vector protocol calculates routes based only on link costs whereas in BGP, for
example, the local route preference value takes priority over the link cost.
Count-to-infinity problem
The Bellman–Ford algorithm does not prevent routing loops from happening and
suffers from the count to infinity problem. The core of the count-to-infinity problem is
that if A tells B that it has a path somewhere, there is no way for B to know if the path
has B as a part of it. To see the problem clearly, imagine a subnet connected like A–
B–C–D–E–F, and let the metric between the routers be "number of jumps". Now
suppose that A is taken offline. In the vector-update-process B notices that the route
to A, which was distance 1, is down – B does not receive the vector update from A.
The problem is, B also gets an update from C, and C is still not aware of the fact that
A is down – so it tells B that A is only two jumps from C (C to B to A), which is false.
This slowly propagates through the network until it reaches infinity (in which case the
algorithm corrects itself, due to the relaxation property of Bellman–Ford).
EXPERIMENT 14:
RUNNING AND USING SERVICES/COMMANDS LIKE PING, TRACE
ROUTE, NSLOOKUP, ARP, TELNET, FTP, ETC.
1. Ping
Ping is a basic Internet program that allows a user to verify that a particular IP
address exists and can accept requests.
Ping is used diagnostically to ensure that a host computer the user is trying to
reach is actually operating. Ping works by sending an Internet Control
Message Protocol (ICMP) Echo Request to a specified interface on the
network and waiting for a reply. Ping can be used for troubleshooting to test
connectivity and determine response time.
Example :
ping computerhope.com
ping 192.168.2.1
2. Traceroute
A traceroute is a function which traces the path from one network to another.
It allows us to diagnose the source of many problems. The tracert command is
a Command Prompt command that's used to show several details about the
path that a packet takes from the computer or device you're on to whatever
destination you specify.
Tracert command syntax:tracert [-d] [-h MaxHops] [-w TimeOut] [-4] [-6]
target [/?]
Example:
tracert 192.168.1.1
tracert www.google.com
3. Command nslookup
The nslookup (which stands for name server lookup) command is a network
utility program used to obtain information about internet servers. It finds name
server information for domains by querying the Domain Name System.
Example:
arp -a
arp -s 220.0.0.161 00-50-04-62-F7-23
5. TelNet
Telnet is a user command and an underlying TCP/IP protocol for accessing
remote computers. Through Telnet, an administrator or another user can
access someone else's computer remotely. On the Web, HTTP and FTP
protocols allow you to request specific files from remote computers, but not to
actually be logged on as a user of that computer. With Telnet, you log on as a
regular user with whatever privileges you may have been granted to the
specific application and data on that computer.
1.append local-file [remote-file] : Append a local file to a file on the remote computer.
2.ascii: Set the file transfer type to ASCII, the default. In ASCII text mode, character-
set and end-of-line characters are converted as necessary.
3.bell: Toggle a bell to ring after each command. By default, the bell is off.
4.binary: Set the file transfer type to binary. Use `Binary' for transferring executable
program files or binary data files e.g. Oracle
7.close : End the FTP session and return to the cmd prompt.
8.debug : Toggle debugging. When debug is on, FTP will display every command.
11.disconnect: Disconnect from the remote host, retaining the ftp prompt.
12.get remote-file [local-file]: Copy a remote file to the local PC.
14.hash : Toggle printing a hash (#) for each 2K data block transferred. By default,
hash mark printing is off.
16.lcd [directory] Change the working directory on the local PC. By default, the
working directory is the directory in which ftp was started.
20.mget remote-files [ ...] Copy multiple remote files to the local PC.
21. status Display the current status of FTP connections and toggles.
22. trace Toggles packet tracing; trace displays the route of each packet
Tools
1. Wireshark
2. Tcpdump
Wireshark
Wireshark is very similar to tcpdump, but has a graphical front-end, plus some
integrated sorting and filtering options.
Wireshark lets the user put network interface controllers into promiscuous
mode (if supported by the network interface controller), so they can see all the
traffic visible on that interface including unicast traffic not sent to that network
interface controller's MAC address.
However, when capturing with a packet analyzer in promiscuous mode on a
port on a network switch, not all traffic through the switch is necessarily sent
to the port where the capture is done, so capturing in promiscuous mode is not
necessarily sufficient to see all network traffic.
Port mirroring or various network taps extend capture to any point on the
network. Simple passive taps are extremely resistant to tampering.
On GNU/Linux, BSD, and macOS, with libpcap 1.0.0 or later, Wireshark 1.4
and later can also put wireless network interface controllers into monitor mode.
If a remote machine captures packets and sends the captured packets to a
machine running Wireshark using the TZSP protocol or the protocol used
by OmniPeek, Wireshark dissects those packets, so it can analyze packets
captured on a remote machine at the time that they are captured.
Features
Data can be captured "from the wire" from a live network connection or read from
a file of already-captured packets.
Live data can be read from different types of networks, including Ethernet, IEEE
802.11, PPP, and loopback.
Captured network data can be browsed via a GUI, or via the terminal (command
line) version of the utility, TShark.
Captured files can be programmatically edited or converted via command-line
switches to the "editcap" program.
Data display can be refined using a display filter.
Plug-ins can be created for dissecting new protocols.
VoIP calls in the captured traffic can be detected. If encoded in a compatible
encoding, the media flow can even be played.
Raw USB traffic can be captured.
Wireless connections can also be filtered as long as they traverse the monitored
Ethernet.
Various settings, timers, and filters can be set to provide the facility of filtering
the output of the captured traffic.
Tcpdump
Tcpdump is a common packet analyzer that runs under the command line.
It allows the user to display TCP/IP and other packets being transmitted or
received over a network to which the computer is attached.
Distributed under the BSD license, tcpdump is free software.
Tcpdump works on most Unix-like operating
systems: Linux, Solaris, FreeBSD, DragonFly
BSD, NetBSD, OpenBSD, OpenWrt, macOS, HP-UX 11i, and AIX.
In those systems, tcpdump uses the libpcap library to capture packets.
The port of tcpdump for Windows is called WinDump; it uses WinPcap, the
Windows port of libpcap.
Functionality
Tcpdump prints the contents of network packets. It can read packets from a
network interface card or from a previously created saved packet file.
Tcpdump can write packets to standard output or a file.
It is also possible to use tcpdump for the specific purpose of intercepting and
displaying the communications of another user or computer.
A user with the necessary privileges on a system acting as
a router or gateway through which unencrypted traffic such
as Telnet or HTTP passes can use tcpdump to view login IDs, passwords,
the URLs and content of websites being viewed, or any other unencrypted
information.
The user may optionally apply a BPF-based filter to limit the number of
packets seen by tcpdump; this renders the output more usable on networks
with a high volume of traffic.
Priveleges Required
In some Unix-like operating systems, a user must have super user privileges to
use tcpdump because the packet capturing mechanisms on those systems
require elevated privileges. However, the -Z option may be used to drop
privileges to a specific unprivileged user after capturing has been set up.
In other Unix-like operating systems, the packet capturing mechanism can be
configured to allow non-privileged users to use it; if that is done, super user
privileges are not required.
EXPERIMENT 17:
SOCKET PROGRAMMING USING UDP AND TCP (DATA & TIME
CLIENT/SERVER, ECHO CLIENT/SERVER, ITERATIVE &
CONCURRENT SERVERS)
(i) Programs using TCP Sockets to implement DATE AND TIME Server &
client.
OBJECTIVE: To implement date and time display from client to server using TCP
Sockets.
DESCRIPTION: TCP Server gets the system date and time and opens the server
socket to read the client details. Client send its address to the server. Then client
receives the date and time from server to display. TCP socket server client connection
is opened for communication. After the date time is displayed the server client
connection is closed with its respective streams to be closed.
ALGORITHM:
Server
1. Create a server socket and bind it to port.
2. Listen for new connection and when a connection arrives, accept it.
3. Send server‟s date and time to the client.
4. Read client‟s IP address sent by the client.
5. Display the client details.
6. Repeat steps 2-5 until the server is terminated.
7. Close all streams.
8. Close the server socket.
9. Stop.
Client
1. Create a client socket and connect it to the server‟s port number.
2. Retrieve its own IP address using built-in function.
3. Send its address to the server.
4. Display the date & time sent by the server.
5. Close the input and output streams.
6. Close the client socket.
7. Stop.
PROGRAM:
//TCP Date Server--tcpdateserver.java import java.net.*;
import java.io.*; import java.util.*; class tcpdateserver
{
public static void main(String arg[])
{
ServerSocket ss = null; Socket cs; PrintStream ps; BufferedReader dis;
String inet;
try
{ ss = new ServerSocket(4444);
System.out.println("Press Ctrl+C to quit"); while(true){
cs = ss.accept();
ps = new PrintStream(cs.getOutputStream()); Date d = new Date();
ps.println(d);
dis = new BufferedReader(new
InputStreamReader(cs.getInputStream())); inet = dis.readLine();
System.out.println("Client System/IP address is :"+ inet); ps.close();
dis.close();
}
}
catch(IOException e)
{
System.out.println("The exception is :" + e);
}
}
}
OUTPUT
Server:
$ javac
tcpdateserver.j
ava $ java
tcpdateserver
Press Ctrl+C
to quit
Client System/IP address is :
localhost.localdomain/127.0.0.1 Client System/IP address
is : localhost.localdomain/127.0.0.1
Client:
$javac
tcpdateclient.java
$ java
tcpdateclient
The date/time on server is: Wed Jul 06 07:12:03 GMT 2011
Every time when a client connects to the server, server‟s date/time will be returned to
the client for synchronization.
RESULT:
Thus the program for implementing to display date and time from client to server
using TCP Sockets was executed successfully and output verified using various
samples.
(ii) Programs using TCP Sockets to implement Echo server & client.
DESCRIPTION: TCP Server gets the message and opens the server socket to read
the client details. Client sends its address to the server. Then client receives the
message from server to display.
ALGORITHM
Server
1. Create a server socket and bind it to port.
2. Listen for new connection and when a connection arrives, accept it.
3. Read the data from client.
4. Echo the data back to the client.
5. Repeat steps 4-5 until „bye‟ or „null‟ is read.
6. Close all streams.
7. Close the server socket.
8. Stop.
Client
1. Create a client socket and connect it to the server‟s port number.
2. Get input from user.
3. If equal to bye or null, then go to step 7.
4. Send user data to the server.
5. Display the data echoed by the server.
6. Repeat steps 2-4.
7. Close the input and output streams.
8. Close the client socket.
9. Stop.
PROGRAM:
OUTPUT
Server:
$ javac tcpechoserver.java $ java tcpechoserver
Server Ready Client Connected Client
[ hello ] Client [ how are you ] Client [ i
am fine ] Client [ ok ] Client Disconnected
Client :
$ javac tcpechoclient.java $ java tcpechoclient Type "bye" to quit
Enter msg to server : hello Server [ hello ]
Enter msg to server : how are you Server [ how are you ]
Enter msg to server : i am fine Server [ i am fine ]
Enter msg to server : ok Server [ ok ]
Enter msg to server : bye
RESULT
Thus data from client to server is echoed back to the client to check reliability/noise
level of the channel.
(iii) Programs using TCP Sockets to implement chat Server & Client.
OBJECTIVE: To implement a chat server and client in java using TCP sockets.
DESCRIPTION: TCP Clients sends request to server and server will receives the
request and response with acknowledgement. Every time client communicates with
server and receive response from it.
ALGORITHM:
Server
1. Create a server socket and bind it to port.
2. Listen for new connection and when a connection arrives, accept it.
3. Read Client's message and display it
4. Get a message from user and send it to client
5. Repeat steps 3-4 until the client sends "end"
6. Close all streams
7. Close the server and client socket
8. Stop
Client
1. Create a client socket and connect it to the server‟s port number
2. Get a message from user and send it to server
3. Read server's response and display it
4. Repeat steps 2-3 until chat is terminated with "end" message
5. Close all input/output streams
6. Close the client socket
7. Stop
PROGRAM:
//Server.java
import java.io.*;
import java.net.*;
class Server {
public static void main(String args[]) { String data = "Networks
Lab";
try {
ServerSocket srvr = new ServerSocket(1234); Socket skt =
srvr.accept(); System.out.print("Server has connected!\n");
PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
System.out.print("Sending string: '" + data + "'\n");
out.print(data);
out.close();
skt.close();
srvr.close();
}
catch(Exception e) { System.out.print("Whoops! It didn't
work!\n");
}
}
}
//Client.java
import java.io.*; import java.net.*; class Client {
public static void main(String args[]) { try {
Socket skt = new Socket("localhost", 1234); BufferedReader in =
new BufferedReader(new
InputStreamReader(skt.getInputStream()));
System.out.print("Received string: '");
while (!in.ready()) {} System.out.println(in.readLine());
System.out.print("'\n"); in.close();
}
catch(Exception e) { System.out.print("Whoops! It didn't
work!\n");
}}}
OUTPUT
Server:
$ javac Server.java $ java Server
Server started Client connected
Cilent
$ javac Client.java $ java Client
RESULT
Thus both the client and server exchange data using TCP socket programming.
(iv) Programs using UDP Sockets to implement Chat server & client.
OBJECTIVE: To implement a chat server and client in java using UDP sockets.
ALGORITHM:
Server
1. Create two ports, server port and client port.
2. Create a datagram socket and bind it to client port.
3. Create a datagram packet to receive client message.
4. Wait for client's data and accept it.
5. Read Client's message.
6. Get data from user.
7. Create a datagram packet and send message through server port.
8. Repeat steps 3-7 until the client has something to send.
9. Close the server socket.
10. Stop.
Client
1. Create two ports, server port and client port.
2. Create a datagram socket and bind it to server port.
3. Get data from user.
4. Create a datagram packet and send data with server ip address and
client port.
5. Create a datagram packet to receive server message.
6. Read server's response and display it.
7. Repeat steps 3-6 until there is some text to send.
8. Close the client socket.
9. Stop.
PROGRAM
import java.io.*;
import java.net.*; class udpchatclient
{
public static int clientport = 8040,serverport = 8050; public static void
main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader
(System.in)); DatagramSocket CliSoc = new
DatagramSocket(serverport);
InetAddress IPAddr; String Text;
if (args.length == 0)
IPAddr = InetAddress.getLocalHost(); else
IPAddr = InetAddress.getByName(args[0]); byte[] SData = new
byte[1024];
System.out.println("Press Enter without text to quit"); while (true)
{
System.out.print("\nEnter text for server : "); Text = br.readLine();
SData = Text.getBytes();
DatagramPacket SPack = new DatagramPacket(SData,SData.length,
IPAddr, clientport );
CliSoc.send(SPack);
if (Text.trim().length() == 0) break;
byte[] RData = new byte[1024];
DatagramPacket RPack = new DatagramPacket(RData,RData.length);
CliSoc.receive(RPack);
String Echo = new String(RPack.getData()) ; Echo = Echo.trim();
System.out.println("From Server <<< " + Echo);
}
CliSoc.close();
}}
OUTPUT
Server
$ javac udpchatserver.java $ java udpchatserver Server Ready
From Client <<< are u the SERVER Msg to Cleint : yes
From Client <<< what do u have to serve Msg to Cleint : no eatables
Client Quits
Client
$ javac udpchatclient.java$ java udpchatclient Press Enter without text
to quit
Enter text for server : are u the SERVER From Server <<< yes
Enter text for server : what do u have to serve From Server <<< no
eatables
Enter text for server : Ok
(V) Program using DNS server to resolve a given host name.
ALGORITHM:
PROGRAM:
#include<stdio.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<netinet/in.h>
int main(int argc,char**argv)
{
char h_name; int h_type;
struct hostent *host; struct in_addr h_addr; if(argc!=2)
{
fprintf(stderr,"USAGE:nslookup\n");
}
if((host=gethostbyname(argv[1]))==NULL)
{
fprintf(stderr,"(mini)nslookup failed on %s\n",argv[1]);
}
h_addr.s_addr=*((unsigned long*)host->h_addr_list[0]); printf("\n IP
ADDRESS=%s\n",inet_ntoa(h_addr));
printf("\n HOST NAME=%s\n",host->h_name); printf("\nADDRESS
LENGTH =%d\n",host->h_length); printf("\nADDRESS TYPE=%d\n",host-
>h_addrtype);
printf("\nLIST OF ADDRESS=%s\n",inet_ntoa(h_addr_list[0])); }
OUTPUT
[it28@localhost ~]$ vi dns.c [it28@localhost ~]$ cc dns.c [it28@localhost
~]$ ./a.out 90.0.0.36 IP ADDRESS=90.0.0.36
HOST NAME=90.0.0.36
ADDRESS LENGTH =4 ADDRESS TYPE=2
LIST OF ADDRESS=90.0.0.36
Result
Hence the program to develop a client that contacts a given DNS server to resolve a
given host name is executed successfully.
OBJECTIVE: To implement a DNS server and client in java using UDP sockets.
DESCRIPTION: DNS stands for domain name system. unique name of the host is
identified with its IP address through server client communication.
ALGORITHM:
Server
1. Create an array of hosts and its ip address in another array
2. Create a datagram socket and bind it to a port
3. Create a datagram packet to receive client request
4. Read the domain name from client to be resolved
5. Lookup the host array for the domain name
6. If found then retrieve corresponding address
7. Create a datagram packet and send ip address to client
8. Repeat steps 3-7 to resolve further requests from clients
9. Close the server socket
10. Stop
Client
1. Create a datagram socket
2. Get domain name from user
3. Create a datagram packet and send domain name to the server
4. Create a datagram packet to receive server message5. Read server's
response
6. If ip address then display it else display "Domain does not exist"
7. Close the client socket
8. Stop
PROGRAM
// UDP DNS Server -- udpdnsserver.java import java.io.*;
import java.net.*;
public class udpdnsserver
{
private static int indexOf(String[] array, String str)
{
str = str.trim();
for (int i=0; i < array.length; i++)
{
if (array[i].equals(str)) return i;
}
return -1; }
public static void main(String arg[])throws IOException
{
String[] hosts = {"yahoo.com", "gmail.com","cricinfo.com",
"facebook.com"}; String[] ip = {"68.180.206.184",
"209.85.148.19","80.168.92.140", "69.63.189.16"};
System.out.println("Press Ctrl + C to Quit"); while (true)
{
DatagramSocket serversocket=new DatagramSocket(1362); byte[]
senddata = new byte[1021];
byte[] receivedata = new byte[1021]; DatagramPacket recvpack =
new DatagramPacket(receivedata, receivedata.length);
serversocket.receive(recvpack);
String sen = new String(recvpack.getData()); InetAddress ipaddress =
recvpack.getAddress(); int port = recvpack.getPort();
String capsent;
System.out.println("Request for host " + sen);
if(indexOf (hosts, sen) != -1) capsent = ip[indexOf (hosts, sen)]; else
capsent = "Host Not Found"; senddata = capsent.getBytes();
DatagramPacket pack = new DatagramPacket(senddata,
senddata.length,ipaddress,port); serversocket.send(pack);
serversocket.close();
}
}
}
import java.io.*;
import java.net.*;
public class udpdnsclient
{
public static void main(String args[])throws IOException
{
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in)); DatagramSocket clientsocket = new
DatagramSocket();
InetAddress ipaddress; if (args.length == 0)
ipaddress = InetAddress.getLocalHost(); else
ipaddress = InetAddress.getByName(args[0]); byte[] senddata = new
byte[1024];
byte[] receivedata = new byte[1024]; int portaddr = 1362;
System.out.print("Enter the hostname : "); String sentence =
br.readLine();
Senddata = sentence.getBytes();
DatagramPacket pack = new
DatagramPacket(senddata,senddata.length, ipaddress,portaddr);
clientsocket.send(pack);
DatagramPacket recvpack =new
DatagramPacket(receivedata,receivedata.length);
clientsocket.receive(recvpack);
String modified = new String(recvpack.getData());
System.out.println("IP Address: " + modified);
clientsocket.close(); }}
OUTPUT
Server
$ javac udpdnsserver.java $ java udpdnsserver Press Ctrl + C to Quit
Request for host yahoo.com Request for host cricinfo.com Request
for host youtube.com
Client
$ javac udpdnsclient.java $ java udpdnsclient
Enter the hostname : yahoo.com
IP Address: 68.180.206.184
$ java udpdnsclient
Enter the hostname : cricinfo.com
IP Address: 80.168.92.140
$ java udpdnsclient
Enter the hostname : youtube.com
IP Address: Host Not Found
RESULT:
Thus domain name requests by the client are resolved into their respective logical
address using lookup method.
Experiment Beyond Syllabus
EXPERIMENT 18:
PROGRAMMING USING RAW SOCKETS.
A raw socket is used to receive raw packets. This means packets received at the
Ethernet layer will directly pass to the raw socket. Stating it precisely, a raw socket
bypasses the normal TCP/IP processing and sends the packets to the specific user
application (see Figure 1).
Other sockets like stream sockets and data gram sockets receive data from the
transport layer that contains no headers but only the payload. This means that there is
no information about the source IP address and MAC address. If applications running
on the same machine or on different machines are communicating, then they are only
exchanging data. The purpose of a raw socket is absolutely different. A raw socket
allows an application to directly access lower level protocols, which means a raw
socket receives un-extracted packets (see Figure 1). There is no need to provide the
port and IP address to a raw socket, unlike in the case of stream and datagram sockets.
Opening a raw socket:To open a socket, you have to know three things – the socket
family, socket type and protocol. For a raw socket, the socket family is AF_PACKET,
the socket type is SOCK_RAWand for the protocol, see the if_ether.h header file. To
receive all packets, the macro is ETH_P_ALL and to receive IP packets, the macro
is ETH_P_IP for the protocol field.
int sock_r;
sock_r=socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL));
if(sock_r<0)
{
printf(“error in socket\n”);
return -1;
}
Reception of the network packet:After successfully opening a raw socket, it’s time
to receive network packets, for which you need to use the recvfrom api. We can also
use the recv api. But recvfrom provides additional information.
Extracting the Ethernet header:Now that we have the network packets in our buffer,
we will get information about the Ethernet header. The Ethernet header contains the
physical address of the source and destination, or the MAC address and protocol of
the receiving packet. The if_ether.h header contains the structure of the Ethernet
header (see Figure 5).
Now, we can easily access these fields:
Note 2: We can also direct the output to a file for better understanding.
Use fflush to avoid the input-output buffer problem when writing into a file.
Extracting the IP header:The IP layer gives various pieces of information like the
source and destination IP address, the transport layer protocol, etc. The structure of
the IP header is defined in the ip.h header file (see Figure 6).
Now, to get this information, you need to increment your buffer pointer by the size of
the Ethernet header because the IP header comes after the Ethernet header:
There are various transport layer protocols. Since the underlying header was the IP
header, we have various IP or Internet protocols. You can see these protocols in
the /etc/protocls file. The TCP and UDP protocol structures are defined in tcp.h and
udp.h respectively. These structures provide the port number of the source and
destination. With the help of the port number, the system gives data to a particular
application. The size of the IP header varies from 20 bytes to 60 bytes. We can
calculate this from the IP header field or IHL. IHL means Internet Header Length
(IHL), which is the number of 32-bit words in the header. So we have to multiply the
IHL by 4 to get the size of the header in bytes:
We now have the pointer to the UDP header. So let’s check some of its fields.
fprintf(log_txt , “\t|-Source Port : %d\n” , ntohs(udp->source));
fprintf(log_txt , “\t|-Destination Port : %d\n” , ntohs(udp->dest));
fprintf(log_txt , “\t|-UDP Length : %d\n” , ntohs(udp->len));
fprintf(log_txt , “\t|-UDP Checksum : %d\n” , ntohs(udp->check));
Extracting data
After the transport layer header, there is data payload remaining. For this, we will
move the pointer to the data, and then print.
for(i=0;i<remaining_data;i++)
{
if(i!=0 && i%16==0)
fprintf(log_txt,”\n”);
fprintf(log_txt,” %.2X “,data[i]);
}
To send a packet, we first have to know the source and destination IP addresses as
well as the MAC address. Use your friend’s MAC & IP address as the destination IP
and MAC address. There are two ways to find out your IP address and MAC address:
1. Enter ifconfig and get the IP and MAC for a particular interface.
2. Enter ioctl and get the IP and MAC.
The second way is more efficient and will make your program machine-independent,
which means you should not enter ifconfig in each machine.
To open a raw socket, you have to know three fields of socket API — Family-
AF_PACKET, Type- SOCK_RAW and for the protocol, let’s
use IPPROTO_RAW because we are trying to send an IP
packet. IPPROTO_RAW macro is defined in the in.h header file:
sock_raw=socket(AF_PACKET,SOCK_RAW,IPPROTO_RAW);
if(sock_raw == -1)
printf(“error in socket”);
There may be various interfaces in your machine like loop back, wired
interface and wireless interface. So you have to decide the interface through which we
can send our packet. After deciding on the interface, you have to get the index of that
interface. For this, first give the name of the interface by setting the field
Getting the IP address of the interface
For this, use the SIOCGIFADDR macro:
To construct the Ethernet header, fill all the fields of the ethhdr structure:
uh->source = htons(23451);
uh->dest = htons(23452);
uh->check = 0;
Like the IP header, the UDP also has the field len, which contains the size of the UDP
header and its payload. So, first, you have to know the UDP payload, which is the
actual data that will be sent.