首页 > 解决方案 > grizzly 教程 java.net.ConnectException

问题描述

我遵循了本教程:https ://javaee.github.io/grizzly/quickstart.html(它包含 4 个文件:ClientFilter、EchoClient、EchoFilter、EchoServer)

本教程的目的是首先服务器回显其类名。这一步进展顺利。第二步是使用 EchoClient.java 回显输入 这一步会发送一个我不知道如何修复的错误。服务器没有运行。

这是文件:

package grizzly.tuto;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.logging.Logger;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.glassfish.grizzly.Connection;
import org.glassfish.grizzly.Grizzly;
import org.glassfish.grizzly.filterchain.FilterChainBuilder;
import org.glassfish.grizzly.filterchain.TransportFilter;
import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
import org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder;
import org.glassfish.grizzly.utils.StringFilter;

/**
 * The simple client, which sends a message to the echo server
 * and waits for response
 */
public class EchoClient {
    private static final Logger logger = Grizzly.logger(EchoClient.class);

    public static void main(String[] args) throws IOException,
            ExecutionException, InterruptedException, TimeoutException {

        Connection connection = null;

        // Create a FilterChain using FilterChainBuilder
        FilterChainBuilder filterChainBuilder = FilterChainBuilder.stateless();
        // Add TransportFilter, which is responsible
        // for reading and writing data to the connection
        filterChainBuilder.add(new TransportFilter());
        // StringFilter is responsible for Buffer <-> String conversion
        filterChainBuilder.add(new StringFilter(Charset.forName("UTF-8")));
        // ClientFilter is responsible for redirecting server responses to the standard output
        filterChainBuilder.add(new ClientFilter());

        // Create TCP transport
        final TCPNIOTransport transport =
                TCPNIOTransportBuilder.newInstance().build();
        transport.setProcessor(filterChainBuilder.build());

        try {
            // start the transport
            transport.start();

            // perform async. connect to the server
            Future<Connection> future = transport.connect(EchoServer.HOST,
                    EchoServer.PORT);
            // wait for connect operation to complete
            connection = future.get(10, TimeUnit.SECONDS);

            assert connection != null;

            System.out.println("Ready... (\"q\" to exit)");
            final BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
            do {
                final String userInput = inReader.readLine();
                if (userInput == null || "q".equals(userInput)) {
                    break;
                }

                connection.write(userInput);
            } while (true);
        } finally {
            // close the client connection
            if (connection != null) {
                connection.close();
            }

            // stop the transport
            transport.shutdownNow();
        }
    }
}


这是日志:

线程“主”java.util.concurrent.ExecutionException 中的异常:java.net.ConnectException:org.glassfish.grizzly.impl.SafeFutureImpl$Sync.innerGet(SafeFutureImpl.java:363) 在 org.glassfish.grizzly 的连接被拒绝。 impl.SafeFutureImpl.get(SafeFutureImpl.java:264) at grizzly.tuto.EchoClient.main(EchoClient.java:54) 原因:java.net.ConnectException:连接在 java.base/sun.nio.ch.SocketChannelImpl 被拒绝.checkConnect(Native Method) at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779) at org.glassfish.grizzly.nio.transport.TCPNIOConnectorHandler.onConnectedAsync(TCPNIOConnectorHandler.java:210) at org .glassfish.grizzly.nio.transport.TCPNIOConnectorHandler$1.connected(TCPNIOConnectorHandler.java:158) 在 org.glassfish.grizzly.nio.transport。TCPNIOConnection.onConnect(TCPNIOConnection.java:258) 在 org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:530) 在 org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 在 org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.executeIoEvent(WorkerThreadIOStrategy.java:103) 在 org.glassfish.grizzly.strategies.AbstractIOStrategy.executeIoEvent (AbstractIOStrategy.java:89) 在 org.glassfish.grizzly.nio.SelectorRunner.iterateKeyEvents(SelectorRunner.java:415) 在 org.glassfish.grizzly.nio.SelectorRunner.iterateKeys(SelectorRunner.java:384) 在 org.glassfish。 grizzly.nio.SelectorRunner.doSelect(SelectorRunner.java:348) at org.glassfish.grizzly.nio.SelectorRunner.run(SelectorRunner.java:279) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker。在 java.base/java.lang.Thread.run(Thread.java:834) 处运行(AbstractThreadPool.java:573)`

EchoClient.java:54 对应于这个 java 文件 - 行: connection = future.get(10, TimeUnit.SECONDS);

供您参考:Eclipse 警告说

Connection 是原始类型。对泛型类型 Connection 的引用应该被参数化`

我使用: - grizzly-framework-2.4.3.jar - JDK-11

如果您有任何想法可以提供帮助或在哪里寻找,我将不胜感激。谢谢

标签: javagrizzly

解决方案


推荐阅读