Java Programming Practical 26
Question 1
Write a program using DatagramPacket and DatagramSocket to create chat application
ChatReceiver.java
Java
import java.net.*;
import java.io.*;
import java.util.*;
class ChatReceiverThread extends Thread
{
DatagramSocket ds;
DatagramPacket dp;
ChatReceiverThread(DatagramSocket s)
{
ds=s;
}
public void run()
{
while(true)
{
try
{
byte[] data =new byte[500];
dp=new DatagramPacket(data,500);
ds.receive(dp);
String msg="";
for(int i=0;data[i]!=0;i++)
msg+=(char)data[i];
System.out.println("From Sender: "+msg);
}
catch(Exception e)
{
System.out.println("Connection ended");
System.exit(0);
break;
}
}
}
}
class ChatReceiver
{
public static void main(String[ ] args)
{
try
{
DatagramSocket mySocket = new DatagramSocket(1234);
Scanner sc=new Scanner(System.in);
// Sending message
InetAddress senderAddress = InetAddress.getLocalHost();
int otherPort = 4321;
new ChatReceiverThread(mySocket).start();
while(true)
{
String messageToSend = sc.nextLine();
byte[ ] sendBuffer = messageToSend.getBytes();
DatagramPacket datagram = new DatagramPacket(sendBuffer, sendBuffer.length,senderAddress, otherPort);
mySocket.send(datagram);
if(messageToSend.equalsIgnoreCase("bye"))
break;
}
mySocket.close( );
}
catch(Exception e)
{
e.printStackTrace( );
}
}
}
ChatSender.java
Java
import java.net.*;
import java.io.*;
import java.util.*;
class ChatSenderThread extends Thread
{
DatagramSocket ds;
DatagramPacket dp;
ChatSenderThread(DatagramSocket s)
{
ds=s;
}
public void run()
{
while(true)
{
try
{
byte[] data =new byte[500];
dp=new DatagramPacket(data,500);
ds.receive(dp);
String msg="";
for(int i=0;data[i]!=0;i++)
msg+=(char)data[i];
System.out.println("From Sender: "+msg);
}
catch(Exception e)
{
System.out.println("Connection ended");
System.exit(0);
break;
}
}
}
}
class ChatSender
{
public static void main(String[ ] args)
{
try
{
DatagramSocket mySocket = new DatagramSocket(4321);
Scanner sc=new Scanner(System.in);
// Sending message
InetAddress senderAddress = InetAddress.getLocalHost();
int otherPort = 1234;
new ChatSenderThread(mySocket).start();
while(true)
{
String messageToSend = sc.nextLine();
byte[ ] sendBuffer = messageToSend.getBytes();
DatagramPacket datagram = new DatagramPacket(sendBuffer, sendBuffer.length,senderAddress, otherPort);
mySocket.send(datagram);
if(messageToSend.equalsIgnoreCase("bye"))
break;
}
mySocket.close( );
}
catch(Exception e)
{
e.printStackTrace( );
}
}
}
Output

Question 2
Write a program using DatagramPacket and DataGramSocket to copy the contents of one file into other.
ServerFile.java
Java
import java.net.*;
import java.io.*;
public class ServerFile
{
public static void main(String args[])throws IOException
{
byte b[]=new byte[3072];
DatagramSocket ds=new DatagramSocket(9999);
System.out.println("Server running......");
FileOutputStream f=new FileOutputStream("serverfile.txt");
DatagramPacket dp=new DatagramPacket(b,b.length);
ds.receive(dp);
String data = new String(dp.getData(),0,dp.getLength());
f.write(data.getBytes(), 0, data.length());
System.out.println("Data saved to file");
}
}
ClientFile.java
Java
import java.net.*;
import java.io.*;
public class ClientFile
{
public static void main(String args[])throws Exception
{
byte b[] = new byte[1024];
int ch;
System.out.println("Client started...");
FileInputStream f = new FileInputStream("clientfile.txt");
DatagramSocket ds = new DatagramSocket();
int i=0;
while((ch=f.read())!=-1)
{
b[i]=(byte)ch;
i++;
}
ds.send(new DatagramPacket(b,i,InetAddress.getLocalHost(),9999));
f.close();
System.out.println("File data sent to server");
}
}
Output
