如何确定客户端连接到哪台服务器

时间:2015-02-27 15:22:34

标签: java network-programming port netty

我正在使用Netty构建客户端 - 服务器网络通信。是否有可能在成功的情况下找出客户连接到哪个应用程序?

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

这是客户端的连接代码:

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");
    }
}

1 个答案:

答案 0 :(得分:0)

修改

如果您想检查具有客户端应用程序的服务器的可用性,您可以使用 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可以发送虚拟数据y等待服务器响应。

enter image description here

你怎么看,Hercules,允许ping服务器:)

希望它有所帮助。