У меня есть клиент tcp, основанный на фреймворке mina (V2.0.21 и J8). Он работает нормально.
Вот минимальный пример:
private static IoConnector connector;
public static void main(String[] args) throws InterruptedException {
connector = new NioSocketConnector();
connector.getFilterChain().addLast( "logger", new LoggingFilter() );
connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
connector.setHandler(new Handler());
try {
ConnectFuture connFuture = connector.connect(new InetSocketAddress("x.x.x.x", 9999));
connFuture.awaitUninterruptibly();
connFuture.getSession();
} catch (Exception e) {
System.err.println(e);
}
while(true) {
System.out.println("sleep.");
Thread.sleep(3000);
}
}
Это мой обработчик:
public class Handler implements IoHandler {
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
String str = (String)message;
System.out.println("->" + str);
}
@Override
public void sessionCreated(IoSession session) throws Exception {
System.out.println("CREATED.");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("OPENED.");
}
...
}
Теперь я изменил строку
От
connector = new NioSocketConnector();
до
connector = new NioDatagramConnector();
, чтобы иметь возможность получать данные через UDP.
Если теперь я отправляю пакеты через UDP (например, с помощью инструмента тестирования сети) на порт 9999 эта программа больше ничего не получит. Но я вижу информацию журнала, что сеанс был открыт и создан. Может кто-нибудь объяснить, почему UDP не работает (точнее, c: messageReceived () не вызывается), а TCP работает?
ОБНОВЛЕНИЕ: В качестве инструмента тестирования я использую этот метод здесь:
public static void main(String[] args) throws IOException {
InetAddress ia = InetAddress.getByName("x.x.x.x");
int port = 9999;
String s = "Message";
byte[] data = s.getBytes();
DatagramPacket packet = new DatagramPacket( data, data.length, ia, port );
DatagramSocket toSocket = new DatagramSocket();
toSocket.send( packet );
toSocket.close();
System.out.println("Send.");
}
Спасибо