Я пишу простой UDP клиент-сервер. Я должен использовать DatagramChannel на стороне клиента и DatagramPacket на стороне сервера. Так что UDP не похож на TCP, мне пришлось проверять сообщения с сервера. Но когда я не получаю пакеты, канал ждет бесконечно, что я должен использовать? А как получать пакеты из DatagramChannel по DatagramSocket, я пробовал, но ничего не произошло.
Clien сторона
channel = DatagramChannel.open();
// channel.socket().setSoTimeout(timeout);
address = new InetSocketAddress("localhost", 2000);
//channel.configureBlocking(false);
channel.connect(address);
public ServerMessage doRequest(String command, Alice argument)throws IOException, ClassNotFoundException{
try {
ClientMessage message = new ClientMessage(command, argument);
sendedstreambuffer = new ByteArrayOutputStream();
sendedstream = new ObjectOutputStream(sendedstreambuffer);
sendedstream.writeObject(message);
sendedstream.flush();
ByteBuffer buffer = ByteBuffer.wrap(sendedstreambuffer.toByteArray());
buffer.flip();
channel.send(buffer, address);
buffer.clear();
channel.receive(buffer);
receivedsteam = new ObjectInputStream(new ByteArrayInputStream(buffer.array()));
return (ServerMessage) receivedsteam.readObject();
}catch (PortUnreachableException e){
return new ServerMessage(SpecialMessage.TIMEOUT, "===\nСервер не доступен.");
}
}
на стороне сервера
DatagramSocket data = new DatagramSocket(2000);
while (true) {
DatagramPacket packet = new DatagramPacket(buf, buf.length);
data.receive(packet);
receivedsteam = new ObjectInputStream(new ByteArrayInputStream(packet.getData()));
ClientMessage message = (ClientMessage) receivedsteam.readObject();
System.out.println(message.getMessage());
}