【问题标题】:Apache Mina UDP Client: java.net.PortUnreachableExceptionApache Mina UDP 客户端:java.net.PortUnreachableException
【发布时间】:2014-11-15 13:28:13
【问题描述】:

似乎没有任何关于 java.net.PortUnreachableException 的文档。

我制作了一个简单的 Apache Mina UDP 服务器并运行它。然后我用telnet 127.0.0.1 3450查看是否在监听,连接没有被拒绝,所以服务器肯定是工作的。

客户端由以下文件组成。

这是下面的主要类:

public static void main(String[] args) {
    System.out.println("started");
    NioDatagramConnector connector = new NioDatagramConnector();

    connector.setHandler(new PacketHandler());
    ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1", 3450));
}

这是 PacketHandler 类的一部分:

@Override
public void sessionOpened(IoSession s) {
    System.out.println("opened " + s.getId() + " " + s.getLocalAddress().toString() + " " + s.getRemoteAddress().toString());
    byte[] data = new byte[]{(byte) 0x01};
    System.out.println("Sending " + data.length);
    IoBuffer buffer = IoBuffer.allocate(data.length);
    buffer.put(data);
    buffer.flip();
    s.write(buffer);
}

客户端运行时出现如下错误:

started
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
created 1
opened 1 /127.0.0.1:56777 /127.0.0.1:3450
Sending 1
java.net.PortUnreachableException
    at sun.nio.ch.DatagramDispatcher.read0(Native Method)
    at sun.nio.ch.DatagramDispatcher.read(DatagramDispatcher.java:43)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
    at sun.nio.ch.IOUtil.read(IOUtil.java:197)
    at sun.nio.ch.DatagramChannelImpl.read(DatagramChannelImpl.java:560)
    at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:311)
    at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:45)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:702)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1121)
    at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
closed 1

服务器还会记录连接,当客户端运行时,不会记录任何连接。但是,当从我的终端运行 telnet 127.0.0.1 3450 时,服务器日志中会记录一个连接。显然,客户端实际上并没有连接。

【问题讨论】:

  • Telnet 不能证明任何关于 UDP 端口的信息。它测试 TCP 端口。您连接的端口上没有打开 UDP 套接字。

标签: java sockets udp apache-mina


【解决方案1】:

Telnet 无法连接到 UDP。因此,您正在使用 Telnet 测试 TCP 服务器,但这并不能证明任何事情。

检查代码,你可以在这里粘贴。

【讨论】:

  • @Michaël 当然可以,而且是正确的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
相关资源
最近更新 更多