Thrissur, Kerala – 680 501
Ph. (91) 04885 287751, 287752

(Approved by AICTE & Affiliated to University of Calicut)

A unit of
Vidya International Charitable Trust

Teacher's Copy


Teaching scheme Credits: 2

3 hours practical per week


*To teach the working of various networking protocols

Lab 1 : Implementation of PC to PC file transfer using serial port and MODEM.

Lab 2,3 : Software Simulation of IEEE 802.3, 802.4 and 802.5 protocols.

Lab.4,5 : Software Simulation of Medium Access Control protocols –

1) GoBackN,

2) Selective Repeat and

3) Sliding Window.

Lab 6 : Implementation of a subset of Simple Mail Transfer Protocol using UDP.

Lab 7,8 : Implementation of a subset of File Transfer Protocol using TCP/IP

Lab 9 : Implementation of "finger" utility using Remote Procedure Call (RPC)

Lab.10 : Generation and processing of HTML forms using CGI.

Reference Books

1. S Richard S.W., Unix Network Programming, Prentice Hall India
2. Comer D.E., Internetworking with TCP/IP, Vol. 1,2 & 3, Prentice Hall India
3. Campione et. al M., The Java Tutorial Continued, Addison Wesley
Internal Continuous Assessment (Maximum Marks-50)
60%-Laboratory practical and record
30%- Test/s
10%- Regularity in the class

VAST Dept of Computer Science & Eng. (1)


          Name of Experiment  Page No

I.Description 03


University Prescribed lab Experiments 
1.Socket Programming using TCP 06
2.Socket programming using UDP 08
3.Bi­directional Communicatio using TCP 10
4.Bi­directional Communication using UDP 14
5.Broadcasting using TCP 17
6.Public Chat 20
7.File Transfer Protocol 23
8.Stop and Wait Protocol 28
9.Go Back N Protocol 32
10.Finger Utility 37
11.Common Gateway Interface 40
Advanced Experiments 
12.Date server and client 43
13.Sliding window protocols 45

Design Experiments
14.Remote method invocation network  49
15.Ping command  51

 Open Ended Experiments 54

VAST Dept of Computer Science & Eng. (2)

Network application are everywhere. Any time you browse the web, send an email message or pop 
up an x window , you are using a network application . Interstingly all network applications are based on the same 
basic programming model, have similar over all logical structures and rely on the same programming interface. We 
will need to understand the basic client­server programming model and how to write client server programs, that 
use the service provided by the internet.
Cilent­Server Programming model
The client–server model is a distributed application structure in computing 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 is a host that is running 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.the 
fundamental operations in the server model is given below (fig 1)

1.Client sends request          2.Server Processes
Client Process Server Process Resources
3. Server sends response

Fig 1. Client Server Transaction

A Client­Server trancsaction consist of four steps
                  1. When a client needs server, initiates a transactions by sending a request to the server. For eg, when a 
web browser needs a file, it sends a request to a web server 
   2. The server recieves the request, interpret it and manipulates its resources in the appropriate way. For 
eg, when a web server receives a request from a browser, it reads a disk file
3. The server sends a response to the client, and then waits for the next request, for eg, the web server 
sends a file back to       a client.
4. The client recieves the response and manipulates it. For eg, after a web browser recieves a page from 
the server, it displays it on the screen
it is important to realize that client and servers are process and not machines or hosts as they are often 
called in this context. A single host can run many different client and serer concurrently and a client and server 
transaction can be on the same or different host. The client server model is the same regardless of the mapping of 
clients and server to host
There are two types of clients­ server application. One type is a client server application that 
implementation of a protocol standard defined in an RFC(Request For Command)
for such an implementation , the cleint and server programs must conform to the rules declared 
by RFC.for ex, the client program could be an implementation of the FTP server. If one developer writes code for 

VAST Dept of Computer Science & Eng. (3)

the clietnt program could be implementation and an independent developers write code for the server program. 
And both developer carefully follow the rules of the RFC then the two programs will be able to interoperate indeed 
, most of todays network applicarion involve connection between client and server programs that have been 
created by independent developer.when a client or server program implements a protocol defined in an RFC , it 
should use the port number allocated with he protocol.
The older sort of client ­server application is a proprietary client server application. In this case 
the client and server programs do not necessaryily conform to any existing RFC. A single developer (development 
team) creates both the client and server programs and the developer has complete control over what goes in the 
code. But because the code does not implement a public domain protocol otherin depedent developer will not be 
able to develop code that inter operate with the application. The developer must be careful not to one of thee well­
known port  number defind in the RFC'S(25­5msp,80­HTTP etc). 
we write TCP & UDP application in java .We could have writen the code in c or c++,but 
we opted fot java for several reasons.First ,the application's are more neatly and clearly writen in java.With java 
there are fewer lines of code and each line can explaineed to the  programmer without must difficulty second 
,client server programming in java is becoming increamily popular and may become the norm in upcoming 
years.Java is platform independent.It has expection mechanism's for robust handling of common problem that 
occur during I/O and networing operattions ,and and its threading faullic 
provide  a way to eassily implment powerful provide a rich library of networks enabled class tha allows 
application to ready acces network servervices. There are two tools available for communication. 
    1, socket thatt uses TCP/IP 
2, Sockets that uses UDP 

Socket programing witth TCP/IP 
process running on different machines conn with each other by sending message into sockets .We said 
that each process socket is analogous to a house and the process's socket is analogous to a door as shown in 
fig.2.The socket is analogous to a door between application process and TCP.The application developer has control 
of everything on the application layer side of socket.However ,it has little control of the transport layer side.

socket Socket

TCP with Buffers TCP with buffer
Process Process
and variables Internet and variables

Controlled by Controlled by Controlled by Controlled by
Application Operating Operating Application
developer System System developer
Host Host

Fig.2  Process Communicating through TCP ports 

VAST Dept of Computer Science & Eng. (4)

 waiting for packet.When the server “hears” the knocking .w ay Client Socket bytes Connection Socket bytes Fig.3 Because socket play a central role in client ­ server application.3  Client socket.the server programs cannot be dormant. welcoming socket and connection socket   Socket Programming with UDP We learned in the previous section that when two process coomunicate over TCP.This pipe remains in   place untill one of the process  close it. the fax then drives the packet in the direction of the packet destination  address.It also  referred as socket programming. UDP also allow two processes running on different hosts to communicate. However.In order of the server to the able to react to the clients initial contact.Client process can send arbitrary bytes into its socket.First. Now let's to a little closer look at the interaction of client & server programs.The TCP guarentees that  the service process untill receive each bytes in the order send. The receiving process must unreavel to received packets to abtain the packets information bytes ********* VAST Dept of Computer Science & streams ae attached to the socket        3. the TCP connection is a direct vitual pipe between the clients socket and sent arbitrary bytes into its  socket. the sendinfprocess pushes the packet into the network through a socket  continue with out fax.from the perspective over  the process it is as if there is a pipe between the two process. and there fore no need for a welcoming socket        2. (5) .the sending host creates packet by attaching the IP address and port number to each batch of bytes it sends       4.There is not an initial handshaking phase during which a pipe is  established between the two process. no intial hand shaking between two processes.client­server application development.socket) that welcome some initial contact from a client. Because UDP does not have a pipe. With the server program running.If create a new door that particular client from the application  perspective. when a process wants to send a bactch of  bytes to another process .the client process can initiate a TCP connection to the simply inserted the bytes into the  pipe.It illustrate fig. the sending process must be exclude attach the destination process.have some sort of door(ip.namely the ip address of the server and the port number of the process. the fax does not guarentee that it will eventually get the datagram to its ultimate destination. Welcoming Socket ake Handsh 3.The client process can also receive bytes from its  socket and server process can also send bytes into its connection socket.the server  has to be specify the address of the  server process.UDP differ from TCP in many  fundamental ways.when the client creates socket object.UDP is connectionless service. in UDP there is:        1. During the three­way handshake the client process knocks on the welcoming door of the server  process.the client process can send.This implies two things.When one of the process wants to send some bytes to the other must be running as a  process before the client attempt.This is done  in the client program by creating a socket object.The client has the job of  initiating contact with the server. Sfter  creating  a packet .

java import java. Algorithm :        TCPserver step 1:start step 2:initialize server socket step 3: repeat the step 4 to step 10 step 4:check the socket is connected by a client or not step 5:if client connected then print “client connected “ step 6:read the data from the client by using a buffered reader step 7:convert the readed string into capital string step 8:send the capital string into client by using data outout stream step 9:stop      TCPClient step 1:start step 2:read the string from keyboard and stored into a variable informuser step 3: connect to the server socket step 4:send the varible inform user to server by using data output stream step 5:read the capital string from the server by using bufferedreader step 6:read the data from the client by using a buffered reader step 7:print the string returned from the server step 8:close the client socket step 9:stop   Program:  System.  Socket clientSocket = new Socket("localhost".  String modSentence.  class TCPclient  {  public static void main(String[] args) throws Exception  {  String sentence.*.  BufferedReader FromUser_in = new BufferedReader(new  InputStreamReader(System.Exp:1  SOCKET PROGRAMMING USING TCP Aim : Write a program to implemnt the Socket Programming using TCP where  a client reads a string and pass it to the  server and the server converted it to upper case and send back to the client. The output will be displayed at client  side.  VAST Dept of Computer Science & Eng.out. 6788).io.  import java.println("Please enter the message to be converted : "). (6) .*.

.  outToClient. FROM SERVER: SAMPLE DATA. DataOutputStream ToServer_out = new  DataOutputStream(").  capSentence = clSentence.out.readLine().  ServerSocket Socket_welcome = new ServerSocket(6788).close().getInputStream()))..  String capSentence.  BufferedReader inFromServer = new BufferedReader(new  InputStreamReader(clientSocket.writeBytes(sentence + '\n').  modSentence = import  connectionSocket.*..  DataOutputStream outToClient = new  DataOutputStream(connectionSocket.  ToServer_out.accept().readLine().println("Waiting for message from client.println("Message converted successfully")..  sentence = FromUser_in.  System.getOutputStream()).*.  import java.  clSentence = inFromClient.  class TCPserver  {  public static void main(String[] args) throws Exception  {  String clSentence..close(). VAST Dept of Computer Science & Eng.  try  {  while(true)  {  Socket connectionSocket = Socket_welcome.out.getOutputStream()).  BufferedReader inFromClient = new BufferedReader(new  InputStreamReader(connectionSocket.   }  }catch(Exception e) {}  }  }   Output: sample data.toUpperCase() + '\n'.  System.readLine().   Socket_welcome.out.  clientSocket.writeBytes(capSentence).. (7) .  System.  }  }  TCPserver.println("Converted message from Server :­ " + modSentence).close(). import The output will be displayed at client  side.getByName("localhost").in)).  DatagramSocket clientSocket = new DatagramSocket().  class UDPclient  {  public static void main(String args[]) throws Exception  {  System. IPaddress step 6:send the datagram packet to server step 7:receive the datagram packet from the server step 8:read the data from the datagram packet step 9:print the string step 10:close the server step 11:stop Program: UDPclient.  byte[] receiveData = new byte[1024].readLine().  import java.*.Exp:2 SOCKET PROGRAMMING USING UDP Aim:    Write a program to implemnt the Socket Programming using UDP where  a client sends a string and pass it to the  server and the server converted it to upper case and send back to the client.*.println("Enter the data to be modified : ").  String sentence = FromUser_in. (8) .  byte[] sendData = new byte[1024]. Algorithm : UDPserver step 1:start step 2:initialize a datagram socket step 3: repeat the step 4 to step 10 step 4: if a datagram socket arrived then it is received by server socket step 5:read the data from the received packet step 6: read the IP address and port number from the received packet step 7:convert the readed string into capital string step 8:send the capital string into client through the datagram step 9:stop      TCPClient step 1:start step 2:read the string from keyboard and stored into a variable informuser step 3: assign Ipaddress to client as inetaddress step 4: create a datagram socket step 5: create a datagram  packet with readed string .  VAST Dept of Computer Science & Eng.   BufferedReader FromUser_in = new BufferedReader(new InputStreamReader(System.  InetAddress IPAddress = InetAddress.

net.               try{  while(true)  {    DatagramPacket receivePacket = new DatagramPacket(receiveData.  DatagramPacket sendPacket = new DatagramPacket(sendData.println("Message coverted by SERVER:" + modSentence). FROM SERVER: SAMPLE DATA.  serverSocket.  System.length).out..  InetAddress IPAddress = receivePacket.  int port = receivePacket. IPAddress.9877). VAST Dept of Computer Science & Eng. sendData = sentence.  System.getBytes().send(sendPacket).  serverSocket.send(sendPacket).  String capSentence = sentence.  clientSocket.  clientSocket. sendData.  DatagramPacket sendPacket = new DatagramPacket(sendData.  System.*..getData()).port).length)..receive(receivePacket).  byte[] sendData = new byte[1024].  }  }catch(Exception e){}  }  } Output: sample data.  byte[] receiveData = new byte[1024].println("Message converted:" ).receive(receivePacket).  sendData = capSentence.getBytes().  String modSentence = new String(receivePacket.  import java.  String sentence = new String(receivePacket.getAddress().")..getPort().  clientSocket.  class UDPserver  {  public static void main(String args[]) throws Exception  {  DatagramSocket serverSocket = new DatagramSocket(9877).io.. (9) .out.close().close().java import java.getData()).out.println("Waiting for client.  DatagramPacket receivePacket = new DatagramPacket(receiveData.toUpperCase().  IPAddress.length.  serverSocket. receiveData. receiveData.length.*.  }  } UDPserver. sendData.

  define thread t1 and t2 ii.writeBytes(s3) ix. deifne socket cs VAST Dept of Computer Science & Eng.Run the threads t1 and t2 Step 3: create a class client extends thread i. Print s4 xiii. deifne socket cs iii. create thread in obj2. create thread in t1.  Define buffered reader br3 to read input from keyboard and br4 to read from client v.if s4='quit” then exit Step 4: stop  Client: Step 1:Start  Step 2: Create a class  biclient i.  define thread t3 and t4 ii. if current thread is t4 then do step 11 to 13  xi.  if current processing thread is t3 then do the steps 7 to step 9  vii.   call the function ss. s4= br. s3=br3.Ds.accept() to connect the client vi.Run the threads t3 and t4 Step 3: create a class server extends thread i.  If s3 ='quit' then exit  x.  create an object for class server as obj2 ii.t4 iii.define server socket ss iv.t2 iii.readLine() xii.  create an object for class client ii.readLine() viii. (10) .Exp:3 BI­DIRECTIONAL COMMUNICATIO USING TCP   Aim:   To write a java program to implement the bidirectional communication between client and server using TCP Algorithm:     Server: Step 1:Start  Step 2: Create a clas  biserver i. t3.

  ob1.readLine() viii.*.  br1 = new BufferedReader(new InputStreamReader(System.  If s1 ='quit' then exit  x.  ob1.t1 = new Thread(ob1).br2.  class biclient  {  public static void main(String args[]) throws Exception  {  client ob1 = new client().s2.  String s1.  ob1.ds.  }  }  class client extends Thread  {  Thread t1.Define buffered reader br1 to read input from keyboard and br2 to read from  BufferedReader br1.currentThread()==t1)  {  VAST Dept of Computer Science & Eng. iv.*.io.start().  client()  {  try  {  cs = new Socket("localhost". Print s2 xiii.  ds = new DataOutputStream(cs.  import java.t2 = new Thread(ob1).in)).  Socket cs. define data output stream ds vi. (11) .  }  catch(Exception e){}  }  public void run()  {  if(Thread.3000).getOutputStream()). if thread is t2 then do step 10 to 12  xi.readLine() xii.start().t2.t2.  DataOutputStream ds.  if thread =t1 then do the steps 6 to step 8  vii.  ob1.getInputStream())).  br2 = new BufferedReader(new InputStreamReader(cs. import java. s2= br2.t1. iii.writeBytes(s1) ix.if s2='quit” then exit Step 4: stop Program: biclient.

*.getInputStream())).t3 = new Thread(ob2).equals("quit")).  }  while(!s1.currentThread()==t2)  {  try  {  do  {  s2=br2.  }  catch(Exception e){}  }  if(Thread.  BufferedReader br3.getOutputStream()).s4.readLine().  br4 = new BufferedReader(new InputStreamReader(cs.br4.writeBytes(s1+'\n').println("Message fromserver:"+s2).t4.t3.   }  while(!s2.  Socket cs.  class biserver  {  public static void main(String args[]) throws Exception  {  server ob2 = new server().in)).    }  catch(Exception e){}  }  VAST Dept of Computer Science & Eng.  ob2.  ob2. (12) .  server()  {  try  {  br3 = new BufferedReader(new InputStreamReader(System.println("Send message to server\n").  DataOutputStream ds.t4 = new Thread(ob2).io.start().          ServerSocket ss.  ob2.*.  System.  import java.readLine().start().  ss= new ServerSocket(3000).accept().  cs = ss.  }  }  class server extends Thread  {  Thread t3.  ob2.  ds = new DataOutputStream( import java.out.t4.out.  try  {  do  {  s1 = br1.  ds.  String s3.   }  catch(Exception e){}  }  }  }  biserver.equals("quit")).

 What about u? message from client : I m fine. public void run()  {  if(Thread.  try  {  do  {  s3 = br3.readLine().  }  catch(Exception e){}  }  if(Thread.println("Message from client:"+s4).  ds.   }  while(!s4.equals("quit")).currentThread()==t4)  {  try  {  do  {  s4=br4. thank you message from client : yah!        VAST Dept of Computer Science & Eng.println("Send message to client\n"). (13) .  System.out.  }  while(!s3.writeBytes(s3+'\n').currentThread()==t3)  {   System.   }  catch(Exception e){}  }  }  } Output:       Send message to client message from client : hai message from client : hai  message from client : how are you? message from client : I m good.   if(s4.out.equals("quit"))  break.equals("quit")).readLine().

            import java.ds2.          public static void main(String args[])throws Exception          {                  byte buffer1[]=new byte[1024].  class udpc  {          public static DatagramSocket ds1.out.*.*.println("Two Way Communication").          public static DatagramPacket (14) .                  ds2=new DatagramSocket(10792).  VAST Dept of Computer Science & Eng.                  ds1=new DatagramSocket(10789).                  byte buffer2[]=new byte[1024].                  BufferedReader br=new BufferedReader(new InputStreamReader(              Exp:4 BI­DIRECTIONAL COMMUNICATION USING UDP Aim:       To write a java program to implement the bidirectional communication using UDP  Algorithm:     Server: Step 1: start Step 2: create a datagram socket called server socket  Step 3: create 2 byte array receive data and send data  Step 4: create a datagram packet receive packet Step 5: receive packet from client  Step 6: get client sentence != bye repeat step 7 to 12 Step 7: print client string Step 8: read input and senetence from the user Step 9: get IP address and port no of Client  Step 10: store the sentence  send data  Step 11: create a datagram packet using send data Step 12: send the packet to the client  Step 13: stop      Client: Step 1: start Step 2: create a datagram socket called client socket  Step 3: get IP Address of host  Step 4: Create 2 byte array send data and receive data Step 5: rget sentence from user and store in send data  Step 6: create a datagram packet send packet using send data Step 7: create a datagram packet receive packet and read the packet from server  Step 8: read ithe server sentence from the receive packet Step 9: print the server sentence   Step 10: if sentence = 'bye' then exit else do the step from 5 to 10 Step 11: stop   Program:             import java.

                  System.          public static DatagramPacket dp1.length().getBytes().ds2.getBytes().out.                  InetAddress id=InetAddress.                  byte buffer2[]=new byte[1024].dp1.getLength()).0.                          if((str2==null)||(str2.                          buffer2=str2.  VAST Dept of Computer Science & Eng.                  ds2=new DatagramSocket(10791).                          ds1.  class udps  {          public static DatagramSocket                  System.*.println("­­­­­­­­­­­­­­­­­­­­").println("Enter Text:").io.equals("end")))  break.                  }         }  }  udps.out.                          System.length).                                 ds2.                          String str2=br.out.*.10791).println("Two Way Communication").str.                  ds1=new DatagramSocket(10790).length().readLine() import java.getLocalHost().                  BufferedReader br=new BufferedReader(new InputStreamReader(System.                          String str=new String(dp1.println(“Recieved Text: “+str).receive(dp1).out.str2.                          buffer1=str.println("­­­­­­­­­­­­­­­­­­­­").                          String str=br.                          System.                  while(true)                  {                          dp1=new DatagramPacket(buffer1.getData().                          dp1=new DatagramPacket(buffer1.dp2.          public static void main(String args[])throws Exception          {                  byte buffer1[]=new byte[1024].println("Enter Text").10789).equals("end"))) break.readLine().                  while(true)                  {                          System.getLocalHost(). (15) .id.                          dp2=new DatagramPacket(  import java.                                 if((str==null)||(str.out.                  InetAddress id=InetAddress.

! Recieved Text: end Enter Text: end VAST Dept of Computer Science & Eng.                        ds1.                          dp2=new DatagramPacket(buffer2.dp2.out. (16) .                          String str4=new String(dp2..receive(dp2).length).equals("end")))     break.                          System.                 }             } }   Output: ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  Two way Communication ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Recieved Text:hai Enter Text: hello Recieved Text:how r u? Enter Text: Fine.buffer2.send(dp1).getLength()).println("Received text "+str4).equals("end")))    break.                          ds2.0.                                  if((str==null)||(str.                                  if((str4==null)||(str4.getData().

accept Step 11: repeat step 10 Step 12: if current processing thread= tsend then do steps 13 to 15 Step 13: str= br.  }  while(!  BufferedReader br = new BufferedReader(new InputStreamReader(cs.equals("exit")).*.io.  String str. import java.readLine() Step 5: Print str Step 6: if str ='exit' then exit else do the step from 4 to 6 Step 7: Stop  Program:   BroadClient.getInputStream())).readLine() Step 14: send the string str to clients  Step 15: if str ='end' then exit Step 16: Stop      Client: Step 1: Start Step 2: Define a Socket cs Step 3: use buffered Reader br to read input from the server  Step 4: str=br. (17) .  import java.5555).out.*.println(str).  public class BroadClient  {  public static void main(String args[]) throws Exception  { Socket cs = new Socket("localhost".Exp:5 BROADCASTING USING TCP Aim Write a Java program to implement Broadcasting using TCP Algorithm:    Server: Step 1: start Step 2: initialize socket array Step 3: initialize a server socket  Step 4: create 2 threads taccept and tsend Step 5: define a buffered reader br to read input from keyboard Step 6: define a data output stream ds to send data  Step 7: initialize count =0 Step 8: run the thread taccept and tsend  Step 9: if current processing thread = taccept then do step 10 to 11 Step 10: sock[count]= ss.  }    } VAST Dept of Computer Science & Eng.  do  {  str = br.

  DataOutputStream ds.   tsend = null.*.println("client" +count+ "connected").  ++count.  BroadServer()  {  try  {  ss = new ServerSocket(5555).*.  BufferedReader br.  String str. BroadServer.  Thread taccept.  }  catch(Exception e) {}  }  while(true).  br = new BufferedReader(new InputStreamReader(  //System.currentThread()==taccept)  {     do  { try {  sock[count] = ss.  for(int i =0.  }  public void run()  {  if(Thread.accept().  System.  public class BroadServer implements Runnable  {  Socket sock[] = new Socket[20].i<count.i++)  VAST Dept of Computer Science & Eng.  ServerSocket ss.exit(0).io. (18) .net.out.println("Server started").  int count = 0.out.tsend.  }  catch(Exception e) {}  taccept = null.  }  else if(Thread.  System.currentThread()==tsend)  {  do  { try {  str = br.  import import  java.

!!! Exit VAST Dept of Computer Science & Eng.  }  }  catch(Exception e){}  }  while(!str.  }  }  Output: Connected Server started client 0 : The World at your fingertips.  bs....taccept..!!! Exit client 3 : The World at your fingertips.tsend.writeBytes(str+'\n').  bs.start().  bs. (19) .          ds. { ds = new  DataOutputStream(sock[i].  bs.!!! Exit client 4 : The World at your fingertips.start().  }  }  public static void main(String args[])  {  BroadServer bs = new BroadServer().equals("Exit")).getOutputStream()).taccept = new Thread(bs).!!! Exit client 2 : The World at your fingertips..!!! Exit client 1 : The World at your fingertips.tsend = new Thread(bs).

 (a message entered in any one side will be displayed to all  other hosts connected)  Algorithm:     Server: Step 1:  start Step 2:  Define Server socket soc[30] Step 3:  Define bufferd reader br3 to read stream from client  Step 4:  thread =t Step 5:  Create object for this same class obj  Step 6:  create one thread taccept and run it Step 7:  initialize count=0  Step 8:  soc[count] = ss.writeBytes(str) Step 21: j++ Step 22: i++ Step 23: if str!= quit then goto 14 Step 24 : Stop      Client Step 1:Start   Step 2: Create a class pcclient Step 3: define buffered reader br1 to read input from keyboard br2 to read from server  Step 4: Define ds to send data into server  Step 5: Create 2 threads t1 and t2 into server  Step 6: If current thread t1 and t2 then run it Step 7: if current thread is t1 then do step 7 to step 8  Step 8: s1= br1.readLine()  Step 17: initialize j=0 Step 18: if j<count do step 19 and 21 Step 19: ds= send dtat to soc[i] Step 20: ds.  Thread taccept.*.readLine() Step 11: Print the String s2 Step 12: Stop   Program: Server: import  ServerSocket ss.  VAST Dept of Computer Science & Eng.readLine() Step 9: if currentThread =t1 Step 10: s2 = br2.accept Step 9:  t[accept] create as a thread.  class pcserver implements Runnable  {  Socket soc[] = new Socket[20].  import java. (20) .  String str.*.io.  Exp:6 PUBLIC CHAT    Aim:  Write a Java program to implement public chat (TCP).  Step 10: run the thread t[count] Step 11: count++ Step 12: repeat the step 8to 11 Step 13: initialize i=0  Step 14: if I < count do step 15 to step 22 Step 15: if current thread =t[i] then do the step16 to step 21 Step 16: str= br3.

  }catch (Exception e){}  }  public void run()  {  if(Thread.  ++count.taccept.  for(int j = 0.  t[count] = new Thread(this).  System.      obj.  DataOutputStream ds.println("Server started").currentThread()==t[i])  { try  { do  {  br3 = new BufferedReader(new InputStreamReader(soc[i].currentThread()==taccept)  {  do  { try  {  soc[count] = ss.taccept = new Thread(obj).net.getInputStream())).j<count.  System.i++)  { if(Thread.  import java.  }  catch(Exception e){}  }  while(true).io.  }  }    Client: import java.*.start().readLine().  ds.  public class pcclient implements Runnable  {  VAST Dept of Computer Science & Eng. BufferedReader br3.  obj.  pcserver()  {  try  {  ss = new ServerSocket(1600).  t[count].out.j++)  {  if(i!=j)  {  ds = new DataOutputStream(soc[j].  str = br3.getOutputStream()).writeBytes("client" +i+ "says : "+str+'\n').equals("quit")).accept().  }  catch(Exception e){}  }  }  }  }  public static void main(String args[])   {    pcserver obj = new pcserver().i<count.*.  }  }  } while(!str.  int count = 0.out.start().  }  else  {  for(int i = 0. (21) .  Thread t[] = new Thread[20].println("client" +count+ "connected").

  pcclient()  {  try  { sock = new Socket("localhost".t1 = new Thread(obj).  System.  obj.t2. (22) .readLine().  }  }  Output:      Client started     Client 0 says   : hi     Client 1 says   : hi     Client 2 says   : hi     Client 3 says   : hi     Client 4 says   : hi     Client 0 says   : quit     Client 1 says   : quit     Client 2 says   : quit     Client 3 says   : quit     Client 4 says   : quit VAST Dept of Computer Science & Eng.equals("quit")).  obj.s2.writeBytes(s1+'\n').start().  br2 = new BufferedReader(new InputStreamReader(sock.println(s2).  BufferedReader br1.start().println("Client started\n") Socket sock.out.  }  catch (Exception e) {}  } while(!s2.getOutputStream()). String s1.  ds.t1.  DataOutputStream ds.equals("quit")).  }  catch (Exception e) {}  } while(!s1.currentThread()==t2)  {  do  {  try  { s2 = br2.currentThread()==t1)  { do  { try  {  s1 = br1.readLine().  obj.getInputStream())).  }catch (Exception e){}  }  public void run()  {  if(Thread.br2.  obj.  br1 = new BufferedReader(new InputStreamReader(System.  ds = new DataOutputStream(sock.  System.1600).t2 = new Thread(obj).  }  }  public static void main(String args[])  {    pcclient obj = new pcclient().  }  else if(Thread.  Thread t1.

 Substring (index+1) Step 9:  Create a afile fp with name frame Step 10:  if method = get then do the step 11 to step 15 Step 11: Define a print writer pw1 Step 12: Define file input stream f Step 13: j=f. Println( name ) Step 7: index = name. index) Step 10: print fname Step 11: Define a socket2 as socket  Step 12: define pw2 as printwriter Step 13: Create a anew file f with filename 'fname Step 14: if method = 'get'  then do steps 15 to 17 Step 15: define br as bufferd reader to readl=input from server  Step 16:  fs define as file output stream  Step 17:  b = Step 14: pw1.index) Step 8: fname= name. Substring (index+1) Step 9:  Method = name.readLine()  Step 18:  buf = h.indexof( “  ” )   Step 8: fname= name.getBytes() Step 21: Print h Step 22: if h!= null do Steps 19 to 23 Step 23: Stop Client  Step 1: Start Step 2: Initialize packet Socket Step 3:  Define pw1 as printWriter             Step 4: Deifine br1 to read Input from key board  Step 5: name = br1. (23) .write(buf) Step 20: while h!= NULL then do step 17 to 20 Step 21: if method = put then do step 22 to 25 Step 22: define fp as file input stream  VAST Dept of Computer Science & Eng.readLine() Step 5: Connect socket =ss2 through socket s2 Step 6: index =name.readLine() Step 6:  pw1.readLine() Step 20: b= h.Substring (index+1) Step 7: method =name.println((char)* s) Step 15: while (j!=­1) Step 16:  if method= put then do step 17 to step 24 Step 17:  Deifne br2 as bufferd readed to read input form client  Step 18: Define f0 as file input stream Step 19: h=br2.getBytes() Step 19: f.  Exp:7 FILE TRANSFER PROTOCOL Aim:    Write a Java program to transfer  file between cliene and server using FTP   Algorithm:     Server: Step 1: Start Step 2: Initialize Server Socket ss1 and ss2 Step 3:  Define Bufferd reader br1 to read string from client  Step 4: name= br1.Substring (0.SubString (0.

getOutputStream().  if(method.readLine()..equals("get"))  {    BufferedReader br2=new BufferedReader(new InputStreamReader(sock2.  index=name.  Socket sock2=new Socket("localhost".*..  public class ftpserver  VAST Dept of Computer Science & Eng.index.  name=br1.  File f=new File(fname).io.println(fname) Step 24: print r Step 25: pw2.println("file sent succussfully"+fname).out.  BufferedReader br1=new BufferedReader(new InputStreamReader(System.  System."file received"+fname).Step 23: r= fp."+method+". import java.  String h.indexOf(" ").  System.  FileOutputStream fs=new FileOutputStream(f).*. (24) .net.  pw2.  }  else  {  FileInputStream fp=new FileInputStream(f).println(r).write(buf).index).  }while(!  import java..println(".println(":.  System.*.ftpclient.  method=name.print (r) Step 26: while r!= 10 do step 23 to 26 Step 27: Stop    Program: ftpclient.  import java.out.  do { r=fp.  Socket sock1=new Socket("localhost".fname.").  byte buf[]=new byte[1024]  PrintWriter pw1=new PrintWriter(sock1.  do {  h=br2.substring(index+1).*.  }while(r!=10).println((char)r).  fname=name.println(name).true).  System.getBytes().java import java.out..  } }catch(Exception e){}  }     }    ftpserver.readLine().out.getInputStream())).getOutputStream().  public class ftpclient  {  public static void main(String args[])throws Exception  { try {  int r.\n Enter the command:get[file]/put[file]").  fs.  System."+fname+".out.equals(null)).10000).method.out.substring(0.  PrintWriter pw2=new PrintWriter(sock2.

println(".  do  {    j=f.accept().  FileInputStream f=new FileInputStream(fp).  System.."+fname+"..index).get .equals(null)). :put file x.  ServerSocket ss2=new ServerSocket(10001).readLine().  index=name... Client side:   Enter the command : get |file|/put|file|   get y.transfer.  }while(j!=­1).txt   y.")....  if(method.  method=name.out.x.text.  ServerSocket ss1=new ServerSocket(10000).  do  {   h=br2.getInputStream())).  File fp=new File(fname).  System.indexOf(" ").write(b).     b=h.getOutputStream().equals("get"))  {  PrintWriter pw1=new PrintWriter(s2.true).. (25) .out. {   public static void main(String args[])throws Exception  {  t ry  {  int j.  byte b[]=new byte[1024].getInputStream()))..getBytes()..txt. .  FileOutputStream fo=new FileOutputStream(fp).").substring(index+1).  String h.substring(  }while(!h..  Socket s1=ss1.println(":"+method+"file"+fname+".   ftpclient VAST Dept of Computer Science & Eng.  fname=name.println((char)j).txt..  name=br1...transfer.readLine().txt.method.y.  fo.equals("put"))  {  BufferedReader br2=new BufferedReader(new  InputStreamReader(s2.  System.  }  }catch(Exception e){}  }         }       Output:     Server side: :get file y.accept().  BufferedReader br1=new BufferedReader(new  InputStreamReader(s1.  }  else if(method..println(h).index.  Socket s2=ss2.fname.out..txt pw1..

 then that frame and all following frames in the window (even if they were received without  error) will be re­sent. to avoid confusion caused by delayed or duplicated ACKs. Information on who is logged­in was useful to check the availability of a person to  meet. the connection is still being utilized as packets are being sent. To avoid this. It is a special case of the general sliding window protocol with  the transmit window size of N and receive window size of 1. the sender can recognize that the previous packet is transmitted successfuly and we could say "stop-n-wait" guarantees reliable transfer between nodes. the sender keeps a record of each packet it sends. VAST Dept of Computer Science & Eng. Finger Utility The Name/Finger protocol. Stop & Wait Protocol stop-n-wait" (sometimes known as "positive acknowledgement with retransmission") is the fundamental technique to provide reliable transfer under unreliable packet delivery system. and sends  that number with every ACK it sends. this method  also results in sending frames multiple times – if any frame was lost or damaged. the sender waits for an acknowledgment (ACK) from the receiver before transmitting the next one. In other  words. and will go back to sequence  number of the last ACK it received from the receiver process and fill its window starting with that frame and  continue the process over again. more packets are being sent. (26) . Go­Back­N ARQ is a more efficient use of a connection than Stop­and­wait ARQ. since unlike waiting for  an acknowledgement for each packet. However. in which the  sending process continues to send a number of frames specified by a window size even without receiving an  acknowledgement (ACK) packet from the receiver.Also. "stop-n-wait" sends each packets with unique sequence numbers and receives that numbers in each ACKs Go Back N Protocol Go­Back­N ARQ is a specific instance of the automatic repeat request (ARQ) protocol. Once the sender has sent all of the frames in its  window. is based on Request for comments  document RFC 742 (December 1977) as an interface to the name[clarification needed] and finger programs that  provide status reports on a particular computer system or a particular person at network sites. The finger program  was written in 1971 by Les Earnest who created the program to solve the need of users who wanted information  on other users of the network. or the ACK acknowledging them  was lost or damaged. Selective Repeat ARQ can be used. In this way. The receiver process keeps track of the sequence number of the next frame it expects to receive. or an out­of­order frame it expects to receive  later) and will resend an ACK for the last correct in­order frame. written by David Zimmerman. The receiver will discard any frame that does not have the exact sequence  number it expects (either a duplicate frame it already acknowledged.After transmitting one packet. This was probably the earliest form of presence information for remote network users. during the time that would otherwise be spent waiting.To support this feature. it will detect that all of the frames since the first lost frame are outstanding.

 UNIX. When the user requests a Web  page (for example. It's simply a basic way for information to be passed from the Web server about your request to the  application program and back again. or  others).  It is part of the Web's Hypertext Transfer Protocol (HTTP). Prior to the finger program. This means that the person who writes the application program can  makes sure it gets used no matter which operating system the server uses (PC. OS/390. it usually needs to be  processed by an application program.    VAST Dept of Computer Science & Eng. This method or convention for  passing data back and forth between the server and the application is called the common gateway interface (CGI). (27) . the server sends back the  requested page. the only way to get this information was with a who program that showed IDs  and terminal line numbers (the server's internal number of the communication line. The Web server typically passes the form information to a small application  program that processes the data and may send back a confirmation message. Common Gateway Interface The common gateway interface (CGI) is a standard way for a Web server to pass a Web user's  request to an application program and to receive data back to forward to the user. over which the user's terminal  is connected) for logged­in users. The common gateway interface provides a consistent way for data to be passed from the user's request to  the application program and back to the user. Macintosh. Earnest named his program after the idea that people would run their fingers  down the who list to find what they were looking for. However. by clicking on a highlighted word or entering a Web site address). when a user fills out a form on a Web page and sends it in.

 pw for printwriter.  do steps ii to v while true ii.0. Read data in strrcv viii.t2.  Else if repeat step vii and viii while true vii. t2  for thread .t2 for thread . (28) . read the data to send in strrcv the count variable iv.Exp:8 STOP AND WAIT PROTOCOL   Aim    :   Write a java program to implement stop and wait protocol Algorithm:      server: Step 1 : Start Step 2 : Declare package java.low = 0.window = 1.  int up = 0. up and low.01'  and port 7071 and stae two threads t1 and  t2 Step 5 : Declare Function  i.                count .count = and java.   up++ iii. t1. If strrcv equal 'Ack' then print 'received “ and decremnet low++ Step 6 : in main function declare  an object for  client   Program: import Step 3 : Declare class variables ss for Server Scokets.*.*.    print strsnd and count vi.   if thread is t1 then do the steps 6 to ii to v while true ii. string strsnd and strrcv Step 4 : Declare in the constructor socket connection at host ' S fot socket. count  window for               integer.  VAST Dept of Computer Science & Eng. br for buffered reader.  Print “waiting for server “ while (up­low>windowprocess) iv   print “sending data” v.  BufferedReader br. two strings strsnd and strrcv Step 4 : Declare constructor where server starts at port 7071 and waits for client  Step 5 : Declare function window process i.  Thread t1. Step 7 : Srop      Client: Step 1 : start Step 2 : Declare package Step 3 : Declare variable s for socket br for BufferedReader .  import java. pw for print write .io and java. If strrcv equals 'data' print count ­1 and send data  v.  if exception print error Step 6 : In main function declare object for stop wait server and call the function windowprocess.  public class StopwaitClient implements Runnable  {  Socket s.  PrintWriter pw.

. String strSnd = new String("DATA").  Thread t1.start()."t2").getOutputStream().").println(strSnd).  t1.getInputStream())).  Socket s.0.println("\n Client started."t1").7071).*.*.  pw.  t2 = new Thread(this.  if (strRcv.  br = new BufferedReader(new InputStreamReader(s.out.equals("ACK"))  {  System.  String strRcv = new String().  }  }   StopwaitServer.println("\nSending DATA "+(up­1)).  PrintWriter pw.   }  }  else  {  while(true)  {  strRcv = br.  import java.currentThread() == t1)  {  while(true)  {  up++.out.readLine().  VAST Dept of Computer Science & Eng.    }  catch(Exception e)  {  System.  t1 = new Thread(this.println(e).println("\nSender waiting for acknowledgement\n").  t1.  BufferedReader br. (29) .  pw.  System.println(count).true). t2.out..1".  StopwaitClient()  {  try  {  s = new Socket("127.  }  }  public void run()  {  try  {  if(Thread.  }  }  }  }  catch(Exception e)  {  System.  }  System.start().java import java.out.println("\nAcknowledgement received for DATA "+low).  }  }  public static void main(String[] arg)  {  new StopwaitClient().println(e).  low++.0.  count = up.t2.sleep(1000).  pw = new PrintWriter(s.  t2.  int count = 0.  String strSnd = new String("ACK").net.  public class StopwaitServer  {  ServerSocket  while(up­low>window)  { System.out.sleep(1000).

parseInt(br.windowProcess().  pw = new PrintWriter(s.  System.  System.out.println(e).  }  } Output: Server side: Server Started.  }  }  public static void main(String[] arg)  {  StopwaitServer serv = new StopwaitServer().equals("DATA"))  {  System.  s = ss.out..  if(strRcv..getInputStream())).  br = new BufferedReader(new InputStreamReader(s.  }  }  public void windowProcess()  {  try  {  while(true)  {  strRcv = br.getOutputStream().out.println(e).println(strSnd).accept().  StopwaitServer()  {  try  {  ss = new ServerSocket(7071).out..println("\n Server started. (30) .").println("Received DATA "+(count­1)).  serv.println("Acknowledged for DATA "+(count­1)+" sent").true).println("\n\nTEST "+strRcv).readLine().  pw.println("\n Client connected").  System.  }  }  }  catch(Exception e)  {  System.  count = Integer. String strRcv = new String().readLine()).out.    }  catch(Exception e)  {  System.  System. Client connected TEST DATA  Received DATA 0 Acknowledged for DATA 0 sent  TEST DATA  Received DATA 1 Acknowledged for DATA 0 sent  TEST DATA  VAST Dept of Computer Science & Eng.out.out.

(31) . Sending DATA 0 Sender waiting for acknowledgement Acknowledgement received for DATA 0 Sending DATA 1 Sender waiting for acknowledgement Acknowledgement received for DATA 0 Sending DATA 2 Sender waiting for acknowledgement Acknowledgement received for DATA 0 Sending DATA 3 Sender waiting for acknowledgement Acknowledgement received for DATA 0 Sending DATA 4 Sender waiting for acknowledgement Acknowledgement received for DATA 0   VAST Dept of Computer Science & Eng...Received DATA 2 Acknowledged for DATA 0 sent  TEST DATA  Received DATA 3 Acknowledged for DATA 0 sent  TEST DATA  Received DATA 4 Acknowledged for DATA 0 sent  Client Side: Client Started.

 temp.0. Print send data  iii. count and string variables StrSnd.1" 8282 port and declare client started.Read input in StrRcvand count data in datacount ii. (32) .Increment datacount by 1 VAST Dept of Computer Science & for PrintWriter datacount. br for BufferedReader.0. Start  thread t1 and t2 Step 5: Declare run() Step 5a: If thread != t1 then do steps i to ii i. If StrRcv=DATA then do steps 7d­7e iii.Else ackcount=ack Rev Count+1 vi. StrRcv Step 4: Declare a constructor with server starts at port number 8282 Step 5: Print server started  Step 6: If client connected then print client connected Step 7: Declare window Process() function Step 7a: Do steps i to vi while true i.  Print StrSnd and datacount Step 3: Declare variables ss for server socket s for socket. print msgSnd and datacount and temp=6 v. Decrement temp by 1 iv.  ackcount. If (datacount=ackcount) dislpay data recieved and print StrSnd and datacount else print data  discarded    Step 8: Start main() and declare an object server and call function window process Step 9: Stop Client Side: Step 1: Start Step 2: Declare java packages Step 3: Declare variables Step 4: Declare constructor where socket connection at "127. If temp=0 display data corrupted. ack             prev. Exp:9 GO BACK N PROTOCOL Aim:   Write a Java Program to implement Go Back N Protocol Algorithm: Server Side Step 1: Start  Step 2: Declare packages io and .

getInputStream())).  public class GBNClient implements Runnable  {  Socket s."t1").println("\n Client started"). Read input to StrRcv vii. t1.  VAST Dept of Computer Science & Eng.join(). (33) .  import java.   //s1.  pw.  String strSnd = new String("data").Semaphore(1).currentThread() == t1)  {  while(true)  {  pw. import java.ackCount = 0.  br = new BufferedReader(new InputStreamReader(s.  t2.acquire().out.*.*. iv.concurrent.8282).  }  }  public void run()  {  try   {  if(Thread.  String strRcv = new String().out.  BufferedReader br.  GBNClient()  {  try  {  s = new Socket(" if StrRcv equals N print sending again ix.true).println(strSnd).join().   System.  Thread t1.1".Semaphore s1 = new java.println(e).getOutputStream().  Else do steps vi to ix  vi.println("\n send data "+dataCount).t2.  private final java.  t2.  pw = new PrintWriter(s.println(dataCount).If StrRcv is Ack print Ack received viii.  dataCount++.concurrent.sleep (1000) v."t2").0.  }  catch(Exception e)  {  System.  PrintWriter pw.0. datacount=ackcount Step 6: Start main() with object GBNClient Step 7: Stop Program:  t2 = new Thread(this.  t1 = new Thread(this.start().  System.  int dataCount = 0.  t1.out.

accept().*.    t1.println("\nACK received for data "+ackCount).ackPrevCount = ­1.    //s1.  System.  }  }  }       }  catch(Exception e)  { System.out.  ackCount = Integer.println(e).println("\n Server started").  BufferedReader br.  GBNServer()  {  try  {  ss = new ServerSocket(8282).out.  s = ss.  String negStrSnd = new String("na").parseInt(br.equals("na"))  {  System.acquire().  }  }  else  {  while(true)  {  strRcv = br.  public class GBNServer  {  ServerSocket ss.out.  import  VAST Dept of Computer Science & Eng.  int dataCount = 0.  t2.  String strRcv = new String().  if (strRcv.release().readLine()). //s1.*.  String strSnd = new String("ack").  PrintWriter pw.equals("ack"))  {  System.println("\nSending again ").   }  }  public static void main(String[] arg)  {  new GBNClient(). (34) .  //s1.release().  t2.sleep(2000).  }  else if(strRcv.  }  }  GBNServer.sleep(1000).  dataCount = ackCount.readLine().net.ackCount = import java.temp = 3.  Socket s.sleep(2000).

  ackPrevCount = dataCount.  pw.  if( dataCount == ackCount)  {  System.println("\n Data Corrupted"+dataCount).  pw.out.out. }  }  }  }  }  catch(Exception e)  {  System.  System.println(strSnd).out.out.equals("data"))  {  temp­­.readLine().   Client Connected   Data Recieved 0   Acknowledged 0   Data Recieved 1   Acknowledged 1   Data Corrupted 2 VAST Dept of Computer Science & Eng.  if(strRcv.  pw.out.  }  } Output: Server Side:   Server started.println(dataCount).  pw.  temp = 6.println("\n Data Recieved"+dataCount).  if (temp == 0)  {  System.  br = new BufferedReader(new InputStreamReader(s.getOutputStream().println(negStrSnd).println("\n Data Discarded "). System.  }  }  public void windowProcess()  {  try  { while(true)  {  strRcv = br.  }  else  {  ackCount = ackPrevCount +1.out.parseInt(br. (35) .true).println(e).  }  }  public static void main(String[] arg)  {  GBNServer serv = new GBNServer().  serv.  dataCount = Integer.readLine()).println("\n Client connected").out.println("Acknowledged"+dataCount).  pw = new PrintWriter(s..println(dataCount).getInputStream()))..windowProcess().println(e).  }  catch(Exception e)  {  System.   }  else  { System.

  Data Discarded    Data Discarded   Data Discarded   Data Discarded   Data Recieved 2   Acknowledged 2   Data Corrupted 3   Data Discarded    Data Discarded   Data Recieved 3   Acknowledged 3   Data Recieved 4   Acknowledged 4   Data Recieved 5   Acknowledged 5 Client Side:   Client Started   Send DATA 0   Acknowledgement recieved for data 0   Send DATA 1    Send DATA 2   Acknowledgement recieved for data 1   Send DATA 3   Send DATA 4   Sending again   Send DATA 5   Send DATA 6   Send DATA 2   Acknowledgement recieved for data 2    Send DATA 3   Sending again    Send DATA 4   Send DATA 5   Send DATA 3   Acknowledgement recieved for data 3   Send DATA 4   Send DATA 5   Acknowledgement recieved for data 4 VAST Dept of Computer Science & Eng. (36) .

exit(1).println ("Invalid paramater : syntax user@host").  import java.exit(1).err. (37) .io.indexOf("@") == ­1)  { import  VAST Dept of Computer Science & Eng.  System.*.err.  public class TCP_Finger_Client  {  public static void main ( String args[] )  {  // Check command line paramaters  if (args.  System.*.println ("Invalid number of paramaters").  }  else  // Check for existence of @ in paramater  if (args[0].Exp:10 FINGER UTILITY PROTOCOL  Aim Write a Java program to implement Finger Utility Algorithm: Step 1: Start Step 2: Declare TCP_Finger_Client Class Step 3: In main() do steps 4 to 7 Step 4: If args length != 1 print invalid no: of parameters Step 5: Otherwise if args[0].length != 1)  {  System.indexof("@")=­1 print invalid parameter  Step 6: Otherwise get the username using substring Step 7: Create connection to server using socket object s Step 8: Define PrintStream object out and DataInputStream object in Step 9: Write username to socket output Step 10: Read response from socket using in to line Step 11: While (line != NULL)  print line and read next line Step 12: Close connection Step 13: Stop   Program:    TCP_Finger_Client.

substring(args[0].readLine().err.println ( line ).  while (line != null)  {  System.substring(0.  try  {  System.println( username ). 80).  // Read next line                                  line = in.  }  }  } Output: Java TCP_Finger_Client student@administrator­desktop Connecting to administrator­desktop <!DOCTYPE HTML PUBLIC "­//IETF//DTD HTML 2. args[0].readLine().getInputStream()). (38) . args[0].  String hostname = args[0].0//EN"> VAST Dept of Computer Science & Eng.  }  catch (IOException e )  {  System.indexOf("@") ).out.  // Create input and output streams to socket  PrintStream out = new PrintStream( s.err.  // Read response from socket  String line = in. }  // Split command line paramater at the @ character  String username = args[0].getOutputStream()) .  // Create a connection to server  Socket s = new Socket(hostname.println ("Connecting to " + hostname).  }  // Terminate connection  s.println ("Socket error : " + e).  }  catch (UnknownHostException e )  {  System.indexOf("@") +1.close().length()).err.println ("Invalid host!").  // Write username to socket output  out.out.  DataInputStream in = new DataInputStream(s.println ("I/O error : " + e).    }  catch (SocketException e )  {  System.

0.2. (39) .<html><head> <title>501 Method Not Implemented </title> </head><body> <h1>Method Not Implemented</h1> <p>student to / not supported <br /> </p> <hr> <address>Apache/2.14 (Ubuntu) Server at 127.1.1 Port 80</address> </body></html> VAST Dept of Computer Science & Eng.

cgi file extract the details from my.cgi by using POST method Step 5: In reg.html Step 6: Display message "Your registration was successful" and show details Step 7: Stop   my. Exp:11 COMMON GATEWAY INTERFACE Aim: To write a program for displaying the details extracted from registration form Algorithm: Step 1: Start Step 2: Create html file for registration form Step 3: Include necessary details in it Step 4: Submit the specified form into reg.cgi" method="post"><table>    <tr>      <td>FirstName  </td>      <td><input type="text" name="fname" /></td>    </tr>    <tr>      <td>Last Name  </td>      <td><input type="text" name="lname" /></td>    </tr>    <tr>      <td>Address  </td>      <td><textarea name="address"></textarea></td>    </tr>    <tr>      <td>UserName  </td>      <td><input type="text" name="uname" /></td>    </tr>    <tr>      <td>Password </td>      <td><input type="password" name="password" /></td>    </tr>    <tr>      <td>Sex  </td>      <td><label>        <input name="sex" type="radio" value="male" checked="checked"/>Male <br />      </label>  <label>        <input name="sex" type="radio" value="female"/>Female <br />  VAST Dept of Computer Science & Eng.html <html>  <head><title> Registartion Form </title></head>  <body>  <h1> ENTER DETAILS </h1>  <form action="./cgi­bin/reg. (40) .

$ ram("nationality").  VAST Dept of Computer Science & Eng.$nationality.$email. "\n".cgi #!/usr/bin/perl ­w use CGI ":standard". print "<b>$fname $lname</b>\n".using CGI.    </label></td>    </tr>    <tr>      <td>Nationality </td>      <td ><input type="text" name="nationality" /></td>    </tr>    <tr>      <td>Email Id  </td>      <td><input type="text" name="email" /></td>    </tr>    <tr>      <td>Phone no </td>      <td><input type="text" maxlength="10" name="phno" /></td>    </tr>    <tr>      <td>&nbsp. print "<b>Email id:</b> $email<br />\n". print "<b>Last Name:</b> $lname<br />\n".$sex. print start_html("CGI­Perl"). my($fname. "\n".</td>      <td><input name="submit" type="submit" id="Submit1" value="Submit" />        <input id="Reset1" type="reset" value="Reset" /></td>    </tr>  </table>  </form>  </body>  </html>    reg.param("lname"). print header. print "<b>Phone no:</b> $phno<br />\n".param("sex").param("email"). print end_html. $phno)=(param("fname"). print h3("Your registration was successfully completed. (41) . print "<b>Address:</b> $address<br />\n".$lname. print "<b>Nationality:</b> $nationality<br />\n".param("phno")).param("password").$uname.param("address").param("uname"). print h4("Details:").$password. print "<b>First Name:</b> $fname<br />\n".").

Output: VAST Dept of Computer Science & Eng. (42) .

   Algorithm: Server Side Step  1 : Start Step 2: Declare packages io.  VAST Dept of Computer Science & Eng.readLine()  Step 7  : Stop    Program: DateServer. create new object  soc Step 5  : create new buffered reader object in Step 6  : print // Date Server  import java.*.util.*.net.  Step 11: close the soc  :  soc.close().util Step  3 : Declare variables Step  4 : create ServerSocket s=new ServerSocket()  Step  5 : do steps 6 to 11 while(true Step  6 : print "Waiting For Connection .accept()  Step  8 :Create new object out  Step  9 : print "Server Date  : " with function Date().net.  Step 3 : Declare variables Step 4 .  import java. .close(). (43) .  import java. ADVANCED EXPERIMENTS  ********** Exp : 12 DATE SERVER AND CLIENT  Aim: Write a Java program to implement A trivial date server and client one­way communication.. ."  Step  7 : Assign Socket soc=s.*.  Step  Step 12: Stop Client Side Step 1 : Start Step 2 : Declare packages io. ..

              Socket soc=s.accept().println("Waiting For Connection ..5217).  class DateClient  {      public static void main(String args[]) throws Exception      {          Socket soc=new Socket(InetAddress.      }     }   Output: administrator@admin­SystemsLab:~$ javac DateServer.              DataOutputStream out=new DataOutputStream(soc.              soc.                 BufferedReader in=new BufferedReader(   new InputStreamReader(           soc.toString() + "\n").              out..readLine()).*..              out.          while(true)          {              System.getOutputStream())..").writeBytes("Server Date  : " + (new Date()).io.  administrator@admin­SystemsLab:~$ javac                          )                      ).          System.  import  administrator@admin­SystemsLab:~$ java DateServer  Waiting For Connection .getLocalHost().java  administrator@admin­SystemsLab:~$ java DateClient  Server Date  : Wed Nov 06 14:24:49 IST 2013  VAST Dept of Computer Science & Eng.class DateServer  {      public static void main(String args[]) throws Exception      {          ServerSocket s=new ServerSocket(5217)...          }               }  } The client     DateClient. (44) import java.  Waiting For Connection .close().println(in.*.

in) Step 6  : set in1=new DataInputStream(s. Step 2  : Import packages Step 3  : create new socket  of ServerSocket() : ser Step 4  : Assign s=ser.println(ch) Step 27: close the socket s Step 28: stop  Receiver Step 1  : Start the Step 18: p. Step 2  : Import packages Step 3  : create new object of ServerSocket() : ser VAST Dept of Computer Science & Eng. of frames exceeds window size"  and break Step 25: print  "Do you wants to send some more frames : " and read ch  Step 26: p.getOutputStream()) Step 12: print "Enter the no. of frames : " and read as nf Step 13: p.getInputStream()) Step 7  : Assign sbuff[] as new String[8] Step 8  : Print Stream p Step 9  : declare sptr=0.Exp :13 SLIDING WINDOW PROTOCOLS   Aim :   Write a Java Program to perform sliding window protocols    Algorithm:  Step 1  : Start the program.accept() Step 5  : set in=new DataInputStream(System.ano and i as integer and ch as String Step 10: do Step 11 to while  the condition 'ch. (45) .equals("yes")'  is true Step 11: p=new PrintStream(s.println(sbuff[sptr]) Step 19:sptr=++sptr%8 Step 20: i++ Step 21: sws­=nf  and print "Acknowledgment received" Step 22:  read ano. and print " for "+ano+" frames" Step 23: sws+=nf Step 24: println "The no.sws=8.println(nf) Step 14: if  nf<=sws­1 is true do step 15 else go to step 24 Step 15: Print "Enter "+nf+" Messages to be send” Step 16: set  i=1  and  do steps 17  to 20 if condition i<=nf is true  {  Step 17: buff[sptr]=in.

VAST Dept of Computer Science & Eng.      p. String sbuff[]=new String[8].sws=8.*.readLine()).print("Acknowledgment received").readLine() Step 19: Stop    Program: import java.println(nf).parseInt(in. (46) .net.  Step 12:   rptr=++rptr%8 and  rbuf[rptr]=in. PrintStream p.i.*.equals("yes")  is true Step 9: read nf Step 10 :if the condition nf<=rws­1 is true do the steps 11 t0 16 else go to 17   Step 11:  i=1 if i<=n is true repeat the steps 12 to 14 untill condition"Enter the no. int sptr=0.parseInt(in1.rws=8 as integer rbuf[].rptr=­1.readLine() Step 13: println "The received Frame " +rptr+" is : "+rbuf[rptr] Step 14: i++ Step 15: rws­=nf.readLine(). of frames : ").<=nf.println("Enter "+nf+" Messages to be send\n"). and println “Acknowledgment sent" Step 16:  p. import java. import java. Socket s=ser.  } sws­=nf. if(nf<=sws­1)  { System.i++)  {  sbuff[sptr]=in.println(sbuff[sptr]).      nf=Integer.  and rws+=nf Step 17:   break. System.accept().out. Step 18 : do    {      p=new PrintStream(s.  for(i=1.out.out. System. DataInputStream in=new DataInputStream(System.  sptr=++sptr%8. DataInputStream in1=new DataInputStream(s.Step 4  : create new socket s Step 5:   create new obj of DataInputStream() : in Step 6 :  create  p=new PrintStream() Step 7:  declare i=0.getInputStream()). public class slidsender { public static void main(String a[])throws Exception { ServerSocket ser=new ServerSocket(10).  p. ch  as String Step 8:  do  steps 9 to while the condition (ch.println(" for "+ano+" frames").println(rptr+1). String ch.rmi.*.

nf. sws+=nf.i++)  {  rptr=++rptr%8.parseInt(in.rptr=­1.  }  else  break. System.out.  }  else {  System.  break.getLocalHost().net.println().readLine()).  ch=in.out.  DataInputStream in=new DataInputStream(s.readLine(). of frames : 4 VAST Dept of Computer Science & Eng.  int i=0.println(rptr+1).  p.println("The no.  }  }  Output:  SENDER: administrator@admin­SystemsLab:~$ javac slidsender.println("The received Frame " +rptr+" is : "+rbuf[rptr]).getOutputStream()).out.equals("yes")). import java. class slidreceiver  {  public static void main(String a[])throws Exception  {  Socket s=new Socket(InetAddress.   do { administrator@admin­SystemsLab:~$ java slidsender Enter the no.  String ch. (47) .println(ch).  }  }  RECEIVER PROGRAM:  import   rbuf[rptr]=in.    }while(ch.  if(nf<=rws­1)  {  for(i=1. System.  }  rws­=nf.*.  s.close().equals("yes")).out.  System.getInputStream()).print("\nDo you wants to send some more frames : ").i<=nf. rws+=nf. of frames exceeds window size").  p.10).*.println("\nAcknowledgment sent\n").          } System.readLine().  ch=in.  String rbuf[]=new String[8].  } while(ch.  PrintStream p=new PrintStream(s.

. (48) . This is network lab This program deals with sliding window protocol Bye Acknowledgment received for 4 frames Do you wants to send some more frames : yes Enter the no. The received Frame 1 is : This is network lab The received Frame 2 is : This program deals with sliding window protocol The received Frame 3 is : bye Acknowledgment sent The received Frame 4 is : This protocol deals with bulk of frames The received Frame 5 is : Acknowledgment is send after receiving bulk of frames The received Frame 6 is : thank you Acknowledgment sent VAST Dept of Computer Science & Eng.. of frames : 3 Enter 3 Messages to be send This protocol deals with bulk of frames Acknowledgment is send after receiving bulk of frames thank you Acknowledgment received for 7 frames Do you wants to send some more frames : no RECEIVER: administrator@admin­SystemsLab:~$ javac administrator@admin­SystemsLab:~$ java slidreceiver The received Frame 0 is : hi.Enter 4 Messages to be send hi.

server. public class rmiserver extends UnicastRemoteObject implements rmiinter { public rmiserver()throws RemoteException { } public double add(double a1. import java. b Step 4: Stop   Program : SERVER PROGRAM: import java.add(c. import java. Step 6: Print  in.a2 Step 4: return a1+a2 Step 5: create new object of rmiserver() ' s Step 6: call method DESIGN EXPERIMENTS ********** Exp : 14 RMI NETWORK Aim : Write a Java program to implementation of Remote method invocation network   Algorithm  : Server  Step 1: Start Step 2: import packages  Step 3: create function add( ) with arguments  a1. (49) .rebind() Step 7: print "Registered" Step 8: Stop Client Step 1: Start Step 2: import packages Step 3:  Assign in by method Naming.38 Step 5: d=30.72.*.double a2)throws RemoteException { return a1+a2.rmi.d) Step 7: Stop  Interface Step 1 : Start Step 2 : import packages Step 3: call method add with two arguments a .lookup() Step 4: c=500.lang. } public static void main(String arg[])throws Exception VAST Dept of Computer Science & Eng.*.*.rmi.*. import java.

(50) .d)).rmi.rebind("rmi://localhost:1099/test".java administrator@admin­SystemsLab:~$ javac rmiinter. public interface rmiinter extends Remote { double add(double a.rmi.*.java administrator@admin­SystemsLab:~$ java rmiclient The Sum is : 531.38. public class rmiclient { public rmiclient()throws RemoteException { } public static void main(String arg[])throws Exception { rmiinter in=(rmiinter)Naming.add(c.1 VAST Dept of Computer Science & Eng. double c=500. Naming.println("The Sum is : " administrator@admin­SystemsLab:~$ rmic rmiserver administrator@admin­SystemsLab:~$ start rmiregistry administrator@admin­SystemsLab:~$ java rmiserver Registered CLIENT  administrator@admin­SystemsLab:~$ javac rmiclient. }   Output:  SERVER: administrator@admin­SystemsLab:~$ javac rmiserver.72. } } CLIENT PROGRAM: import java.{ rmiserver s=new rmiserver(). System.out.out.lookup("rmi://localhost:1099/test"). } } INTERFACE PROGRAM: import java. System.println("Registered"). double d=30.*.s).double b)throws RemoteException.

net and other necessary packages Step 8: Initialize the ping client with both sockets as null value. Step 6: The client program is then started by starting socket.    Ping client Step 8: Start Step 8: Import java.println("ping server"). VAST Dept of Computer Science & Eng. DataInputStream di.Exp:15 PING COMMAND Aim To write a program in java to demonstrate the usage of PING command. } and other necessary packages. Step 8: Start the socket Step 8: Get the IP address of the Step 8: At the receiver end. (51) . try { csoc=es. Step 8: Stop   Program: PING SERVER import java.println(e). Step 8: Ping the server. the server is pinged. tr { es=new ServerSocket(9999). } catch(Exception e) { System. public class pingserver { public static void main(String a[]) {  String line1. Step 3 Initialize the ping server with both sockets as null value. import java. Step 8: Stop the program. Step 4: Start the server socket. Step 5: At the client give the IP address of the server. Socket csoc.accept().*. csoc=null.out. the client is pinged. Step 7: At the receiver end. ServerSocket es.out.line2.*. int i. Algorithm Pingserver Step 1: Start Step 2: Import java. PrintStream ps.

println(ip).getOutputStream()).  ps. DataInputStream in = new DataInputStream(System. Socket thesocket = new Socket(ip.out.readLine().readLine(). k < 50000. for (i = 0. int i.println(e).in). k++) {    } VAST Dept of Computer Science & Eng.out.println(line1+"reply from host:bytes=3<time<1ms TT<=128"). (52) . j < 1000. j++) { for (k = 0. i < 4.println("pinged by client"). 9999).flush(). } else { for (i = 0. s=new PrintStream(csoc.i++) { line1=di. ufferedReader networkIn=null.close(). di=new DataInputStream( } di. k++) {   } } System.println("enter the IP address:") String ip = in. out.*. i++) { for (j = 0.getInputStream()). if (inp != null) { for (j = 0. System.println("\npinging" + ip + "with 32 bytes of data\n").i<4.out.println("reply from" + inp). k < 5000. out = new PrintWriter(thesocket. } catch(Exception e) { System. public class pingclient { public static void main(String args[]) {    PrintWriter"\nrequest time out"). } } } } } catch (IOException e) { for (i = 0. j++) { for (k = 0. i++) { for (j = 0. k++) { } System. j < 10000. networkIn = new BufferedReader(new InputStreamReader(System. ps. String inp = networkIn.k. for(i=0. j < 10000.        }  }  } PING CLIENT import java. i++) { out. i < 4. k < 50000.*. System. import java.j.getOutputStream()).readLine(). j++) { for (k = 0. try { System.close(). i < 4.out.

} } try { if(networkIn!=null) networkIn. if(out!=null) out. } } } Output PING CLIENT administrator@admin­SystemsLab:~$ javac pingclient.168. } catch(Exception e) { System.close(). } administrator@admin­SystemsLab:~$ java pingclient enter the IP address: 192.10with 32 bytes of data 5 reply from5 8 reply from8 9 reply from9 4 reply from4 D:\Chitra\Java> PINGSERVER administrator@admin­SystemsLab:~$ javac pingserver.println("\nrequest timed out").10 administrator@admin­SystemsLab:~$ java pingserver ping server pinged by client pinged by client pinged by client pinged by client VAST Dept of Computer Science & Eng.close(). (53) .println("\nrequested time out").out.1.168.1.

(54) . 4.  To perform remote command execution (ie) command entered by the user at the client should be executed by         the server. 3. VAST Dept of Computer Science & Eng. 5.(Talk Command) 2. OPEN­ENDED EXPERIENTS ********** 1.  To send and receive message from client and server using connection oriented service.  Write a program to design and implement a web server to retrieve information identified by the       requested URL.  Write a program to implement a file server with support for user authentication.  To write a java program to implement cyclic redundancy check.

Lab-In-Charge Head Of Department .