Я пытаюсь создать сервер, который может обрабатывать несколько запросов одновременно на одном и том же номере порта через UDP.Ниже приведен Java-код для того же самого.
Runnable task = () ->
{
DatagramSocket aSocket=null;
while(true)
{
try
{
aSocket= new DatagramSocket(2222);
byte[] buffer=new byte[1000];
DatagramPacket Reply=new DatagramPacket(buffer,buffer.length);
aSocket.receive(Reply);
String rec=new String(Reply.getData());
System.out.println("rec "+rec);
String[] splited = rec.split("\\s+");
System.out.println("Operation "+splited[0]);
if(splited[0].equalsIgnoreCase("Enroll"))
{
String ret=cs.enrollCourse(splited[1],splited[2],splited[3]);
byte[] temp=new byte[1000];
temp=ret.getBytes();
DatagramPacket se=new DatagramPacket(temp,temp.length,Reply.getAddress(),Reply.getPort());
aSocket.send(se);
}
if(splited[0].equalsIgnoreCase("Drop"))
{
String ret=cs.drop_external(splited[1],splited[2]);
byte[] temp=new byte[1000];
temp=ret.getBytes();
DatagramPacket se=new DatagramPacket(temp,temp.length,Reply.getAddress(),Reply.getPort());
aSocket.send(se);
aSocket.close();
}
if(splited[0].equalsIgnoreCase("list"))
{
String ret=cs.listCourseAvailability(splited[1],splited[2]);
byte[] temp=new byte[1000];
temp=ret.getBytes();
DatagramPacket se=new DatagramPacket(temp,temp.length,Reply.getAddress(),Reply.getPort());
aSocket.send(se);
}
if(splited[0].equalsIgnoreCase("Remove"))
{
String ret=cs.removeCourse(splited[1],splited[2]);
byte[] temp=new byte[1000];
temp=ret.getBytes();
DatagramPacket se=new DatagramPacket(temp,temp.length,Reply.getAddress(),Reply.getPort());
aSocket.send(se);
}
}catch(Exception e)
{
System.out.println(e.getMessage());
}
finally
{
if (aSocket != null)
{
aSocket.close();
}
}
}
};
Thread t=new Thread(task);
t.start();
Когда два запроса поступают в одно и то же время, один из них не получен вышеуказанным кодом.
Правильна ли реализация?Есть ли другой способ реализовать то же самое с использованием UDP?