【问题标题】:How to figure out to which server a client connected to如何确定客户端连接到哪个服务器
【发布时间】:2015-02-27 15:22:34
【问题描述】:

我正在使用 Netty 构建客户端-服务器网络通信。如果成功,是否可以找出客户端连接到了哪个应用?

这是我尝试解决的以下问题:如果 Tomcat 服务器正在侦听端口 8080,我的客户端应用程序成功连接到“服务器”。看起来 在监听端口并不重要。 如何确定我的服务器应用程序当前是否已启动并侦听端口而不是例如雄猫?

这是客户端的连接代码:

public void run(){
    //disconnectTest();
    createBootstrap( new Bootstrap(), new NioEventLoopGroup(), true);
}

public void createBootstrap( Bootstrap b, EventLoopGroup eventLoop, boolean initialAttempt){
mWorkerGroup = eventLoop;

try {
    b.group(mWorkerGroup)
            .channel(NioSocketChannel.class)
            .option(ChannelOption.SO_KEEPALIVE, true)  
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)
            .handler(new ClientChannelInitializer());

        logger.info("Connecting client...");
        b.connect(mHost, mPort)
            .addListener( new ConnectionListener(this, initialAttempt));
    } catch (Exception e) {
        logger.error("Failed to connect client to server '" +mHost +": " +mPort +". Error: ", e);
    }
}

来自 ConnectionListener 的片段:

public void operationComplete(ChannelFuture future) throws Exception {
    if (future.isSuccess()) {  
       System.out.println("success");
    }else{
       System.out.println("error");
    }
}

【问题讨论】:

  • 让你在tomcat上的webapp提供一个带有一些状态信息的url。然后您可以从您的客户端访问此 url 并检查答案。如果它在那个 url 上回答,它接缝是你的 webapp,如果内容是预期的,它就是 webapp。

标签: java network-programming port netty


【解决方案1】:

编辑:

如果您想通过客户端 App 检查服务器的可用性,您可以使用 Java7 可以为我们提供的某些工具,例如,使用以下代码:

private static boolean available(int port) {
    try (Socket ignored = new Socket("localhost", port)) {
        return false;
    } catch (IOException ignored) {
        return true;
    }
}

这不一定是 Netty 的特定功能。更多信息在这里: Sockets: Discover port availability using Java

享受吧。

要在您的客户端应用程序之外检查它:

为了测试服务器状态,我使用了Hercules 软件客户端。如果你知道服务器会响应某些事情,使用 hercules 你可以发送一个虚拟数据,等待服务器响应。

Hercules,你怎么看也允许对服务器进行 ping :)

希望对你有帮助。

【讨论】:

  • 不幸的是,我必须从 ClientApplication 中检查它。所以这不是一个选择......当然,服务器可以将“已连接”消息发送回客户端以确认正确的连接,并且客户端可以在等待时超时。但我希望有一个不同的解决方案,由 Netty 提供。
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多