I am new to UDP protocol, and I want to learn from a good example. I finally found a good example but it gives java.lang.ClassNotFoundException: packagename.Student Exception
I run the server first then the client.
The client output:
Message sent from client
Response from server:Thank you for the message□□□□□□□□□□□□□□□□□□□□□
Big line of □□□□ above
The Server output:
java.lang.ClassNotFoundException: ex_udp_client.Student at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:266) at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:622) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369) at ex_udp_server.UDPSocketServer.createAndListenSocket(UDPSocketServer.java:40) at ex_udp_server.UDPSocketServer.main(UDPSocketServer.java:72) BUILD SUCCESSFUL (total time: 6 seconds)
I think the exception thrown at this line:Student student = (Student) is.readObject();
How to fix?
The Serializable class Copied to both packages of client and server
import java.io.Serializable;
public class Student implements Serializable
{
public Student(int id, String name, String address1)
{
this.id = id;
this.name = name;
this.addressLine = address1;
}
private static final long serialVersionUID = 1L;
private int id;
private String name;
private String addressLine;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getAddressLine()
{
return addressLine;
}
public void setAddressLine(String addressLine)
{
this.addressLine = addressLine;
}
public String toString()
{
return "Id = " + getId() + " Name = " + getName() + " Address = " + getAddressLine();
}
}
The Server class
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPSocketServer
{
DatagramSocket socket = null;
public UDPSocketServer()
{
}
public void createAndListenSocket()
{
try
{
socket = new DatagramSocket(9876);
byte[] incomingData = new byte[1024];
while (true)
{
DatagramPacket incomingPacket = new DatagramPacket(incomingData, incomingData.length);
socket.receive(incomingPacket);
byte[] data = incomingPacket.getData();
ByteArrayInputStream in = new ByteArrayInputStream(data);
ObjectInputStream is = new ObjectInputStream(in);
try
{
Student student = (Student) is.readObject();
System.out.println("Student object received = " + student);
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}
InetAddress IPAddress = incomingPacket.getAddress();
int port = incomingPacket.getPort();
String reply = "Thank you for the message";
byte[] replyBytea = reply.getBytes();
DatagramPacket replyPacket =
new DatagramPacket(replyBytea, replyBytea.length, IPAddress, port);
socket.send(replyPacket);
Thread.sleep(2000);
System.exit(0);
}
} catch (SocketException e)
{
e.printStackTrace();
} catch (IOException i)
{
i.printStackTrace();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
UDPSocketServer server = new UDPSocketServer();
server.createAndListenSocket();
}
}
The Client class
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.*;
public class UDPSocketClient
{
DatagramSocket Socket;
public UDPSocketClient()
{
}
public void createAndListenSocket()
{
try
{
Socket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] incomingData = new byte[1024];
Student student = new Student(1, "Bijoy", "Kerala");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(outputStream);
os.writeObject(student);
byte[] data = outputStream.toByteArray();
DatagramPacket sendPacket = new DatagramPacket(data, data.length, IPAddress, 9876);
Socket.send(sendPacket);
System.out.println("Message sent from client");
DatagramPacket incomingPacket = new DatagramPacket(incomingData, incomingData.length);
Socket.receive(incomingPacket);
String response = new String(incomingPacket.getData());
System.out.println("Response from server:" + response);
Thread.sleep(2000);
} catch (UnknownHostException e)
{
e.printStackTrace();
} catch (SocketException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
UDPSocketClient client = new UDPSocketClient();
client.createAndListenSocket();
}
}