Netty使用TCP给我一个错误的端口

时间:2012-06-01 15:05:59

标签: java tcp netty

我正在使用Netty和Java尝试配置TCP客户端。到目前为止一切正常,除了我在端口1050上连接但是当我在处理程序的messageReceived()方法上调用messageEvent.getRemoteAddress()时,我得到了端口1500.我将端口更改为1049但是我'我仍然收到1500.这是Netty的问题还是可能是服务器的问题?

我的硬件设置是:这个netty客户端在Java服务器上运行,并且有几个访问控制设备在这里传播。设备充当tcp服务器,netty充当客户端,处理服务器发送的所有内容并回复它们。

tcp服务器初始化是这样的:

private ChannelFactory fabrica;
private ServerBootstrap bootstrap;

public void iniciarServidorTCP() {
    fabrica = new NioServerSocketChannelFactory(
            Executors.newCachedThreadPool(),
            Executors.newCachedThreadPool());
    bootstrap = new ServerBootstrap(fabrica);
    bootstrap.setPipelineFactory(new ChannelPipelineFactory() {

        @Override
        public ChannelPipeline getPipeline() throws Exception {
            ChannelPipeline pipeline = Channels.pipeline();
            pipeline.addLast("decoderDeMensagem", new MensagemDecoderTCP());
            pipeline.addLast("handlerGerente", new GerenteTCP());
            pipeline.addLast("encoder de mensagem", new MensagemEncoderTCP());
            return pipeline;
        }
    });
    bootstrap.setOption("child.tcpNoDelay", true);
    bootstrap.setOption("child.reuseAddress", true);
    bootstrap.bind(new InetSocketAddress(1050));
}

知道我为什么得到1500而不是1050?这可能是设备的问题吗?

1 个答案:

答案 0 :(得分:3)

每个TCP连接都有一个源端口和一个目标端口。连接到服务器时,服务器将目标端口视为其已知地址。客户端选择源端口。在任何一端,获取“远程地址”获取另一方的地址。因此,当您在服务器上调用get remote address时,您将获得 client 的地址,而不是服务器的地址。

想象一下,您的服务器具有一个IP地址和一个众所周知的端口。现在,假设您有一台具有一个IP地址的客户端计算机。如果它与服务器建立了四个连接,那么它们如何将这些连接区分开来?答案是客户端端口不同。