java - 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
如果您有任何想法可以提供帮助或在哪里寻找,我将不胜感激。谢谢
解决方案
推荐阅读
- android - android ndk opengl creating protected context
- regex - 提取子字符串的正则表达式是什么?
- sql - Create SQL column that subtracts two date columns
- java - Is there a lightweight REST client frameworks that allows parallel construction of requests?
- javascript - Javascript setTimeout: How to print the values given in the order?
- c# - Passing ADFS authenticated user's UPN to SQL string for connection
- javascript - 如果只选择了一个选项,则将文本添加到文本框
- javascript - 使用 javascript 实时流式传输 JSON 数据
- python - 上下文管理器在类错误中实现为“实例没有属性'__exit__'”
- c++ - 在 C++17/20 中迭代元组