服务器上环回口的作用,Netty 4.0.17基本服务器在Windows上的环回上抓取了一堆TCP端口(Netty 4.0.17 basic server grabs a bunch of TCP p...

I'm running an echo server on windows 7 ultimate using jdk 1.7.0 (u51) 64bit.

java version "1.7.0_51"

Java(TM) SE Runtime Environment (build 1.7.0_51-b13)

Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

On Linux / Mac, netstat shows that this process only grabs the specified port (9809 for the example for listening). However on windows it also grabs a bunch of other TCP ports on loopback (127.0.0.1).

EDIT: The behavior is the same for netty versions 4.0.17.Final and the just released 4.0.18.Final

Netstat listing for one run (the PID was 4956):

PS C:\Users\xxxx> netstat -ano | select-string 4956

TCP 0.0.0.0:9809 0.0.0.0:0 LISTENING 4956

TCP 127.0.0.1:50682 127.0.0.1:50683 ESTABLISHED 4956

TCP 127.0.0.1:50683 127.0.0.1:50682 ESTABLISHED 4956

TCP 127.0.0.1:50684 127.0.0.1:50685 ESTABLISHED 4956

TCP 127.0.0.1:50685 127.0.0.1:50684 ESTABLISHED 4956

TCP 127.0.0.1:50686 127.0.0.1:50687 ESTABLISHED 4956

TCP 127.0.0.1:50687 127.0.0.1:50686 ESTABLISHED 4956

TCP 127.0.0.1:50688 127.0.0.1:50689 ESTABLISHED 4956

TCP 127.0.0.1:50689 127.0.0.1:50688 ESTABLISHED 4956

TCP 127.0.0.1:50690 127.0.0.1:50691 ESTABLISHED 4956

TCP 127.0.0.1:50691 127.0.0.1:50690 ESTABLISHED 4956

TCP 127.0.0.1:50692 127.0.0.1:50693 ESTABLISHED 4956

TCP 127.0.0.1:50693 127.0.0.1:50692 ESTABLISHED 4956

TCP 127.0.0.1:50694 127.0.0.1:50695 ESTABLISHED 4956

TCP 127.0.0.1:50695 127.0.0.1:50694 ESTABLISHED 4956

TCP 127.0.0.1:50696 127.0.0.1:50697 ESTABLISHED 4956

TCP 127.0.0.1:50697 127.0.0.1:50696 ESTABLISHED 4956

TCP 127.0.0.1:50698 127.0.0.1:50699 ESTABLISHED 4956

TCP 127.0.0.1:50699 127.0.0.1:50698 ESTABLISHED 4956

TCP 127.0.0.1:50700 127.0.0.1:50701 ESTABLISHED 4956

TCP 127.0.0.1:50701 127.0.0.1:50700 ESTABLISHED 4956

TCP 127.0.0.1:50702 127.0.0.1:50703 ESTABLISHED 4956

TCP 127.0.0.1:50703 127.0.0.1:50702 ESTABLISHED 4956

TCP 127.0.0.1:50704 127.0.0.1:50705 ESTABLISHED 4956

TCP 127.0.0.1:50705 127.0.0.1:50704 ESTABLISHED 4956

TCP [::]:9809 [::]:0 LISTENING 4956

These don't show up on Linux/Mac, only on Windows. I'm assuming this is some sort of IPC mechanism on windows (per worker thread perhaps), but wished to ask if anyone can authoritatively clarify this for me. The issue is since netty / java grabs these local ports running any other apps trying to bind to these ports (mostly dev servers, debuggers allocating random high ports) fail with a permission denied type error message. I mostly work on linux/mac, so wondering if I missed some obvious redmondism :)

The echo server code is given below: ( I boiled it down to a basic server to test)

package test;

import io.netty.bootstrap.ServerBootstrap;

import io.netty.buffer.ByteBuf;

import io.netty.channel.Channel;

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.SimpleChannelInboundHandler;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioServerSocketChannel;

public class TestServer extends ChannelInitializer{

private int port = 9809;

public TestServer(int port) {

this.port = port;

}

public void run() throws Exception {

NioEventLoopGroup pool = new NioEventLoopGroup();

try {

ServerBootstrap bootstrap = new ServerBootstrap();

Channel c = bootstrap.group(pool).channel(NioServerSocketChannel.class).childHandler(this).bind(port).sync().channel();

c.closeFuture().sync();

} finally {

pool.shutdownGracefully();

}

}

/**

* @param args

*/

public static void main(String[] args) throws Exception {

int port = 9809;

TestServer server = new TestServer(port);

server.run();

}

@Override

protected void initChannel(SocketChannel channel) throws Exception {

channel.pipeline().addLast("handler", new Handler());

}

private class Handler extends SimpleChannelInboundHandler {

@Override

protected void channelRead0(ChannelHandlerContext ctx, Object obj)

throws Exception {

ByteBuf buf = (ByteBuf)obj;

ctx.writeAndFlush(buf.retain());

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值