有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在使用Netty和Java来配置TCP客户端。到目前为止,一切正常,除了我正在连接端口1050,但当我调用messageEvent时。在处理程序的messageReceived()方法上,获取端口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) 个答案

  1. # 1 楼答案

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

    假设你有一个服务器,有一个IP地址和一个众所周知的端口。现在,假设您有一台具有一个IP地址的客户机。如果它与服务器有四个连接,那么两端如何区分这些连接?答案是客户端端口不同