Address already in use: bind 解决端口号被占用

端口号占用解决

  • 端口号占用解决

端口号占用解决

服务端main程序已经启用,再次运行main程序,则会报告端口号被占用的错误。下面是解决办法1.WIN+R键(Windows图标键和字母R键)打开运行窗口

Address already in use: bind 解决端口号被占用_第1张图片
2.打开黑窗口(DOS窗口),输入命令 netstat -ano 查看当前端口号
Address already in use: bind 解决端口号被占用_第2张图片
3.确定自己的程序使用的端口号,一定要准确,不然会误操作关闭了其它进程,带来不必要的麻烦。 比如我的程序:
public static void main(String[] args) {
		// 通信器
		Communicator ic = null;
		// 初始化通信器
		ic = Util.initialize(args);
		// 创建ICE适配器,将服务调用地址和服务映射起来
		// “HelloServiceAdapter”是适配器名,“default -p 1888”是服务调用的地址
		ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("HelloServiceAdapter", "default -p 1888");
		// 将服务的具体实现类servant交给这个适配器
		Ice.Object servant = new HelloI();
		
		// "HelloIce" 服务接口在ICE中的注册名,转成唯一标识identity
		Identity id = Util.stringToIdentity("HelloIce");
		adapter.add(servant, id);
		
		// 激活这个适配器
		adapter.activate();
		log.info("Server服务器容器启动成功!");
	}

这里明确了端口号是1888,所以我们找端口号为1888的进程PID
报错信息如下: Address already in use: bind

Exception in thread "main" Ice.SocketException
    error = 0
	at IceInternal.Network.doBind(Network.java:307)
	at IceInternal.TcpAcceptor.listen(TcpAcceptor.java:35)
	at IceInternal.IncomingConnectionFactory.createAcceptor(IncomingConnectionFactory.java:591)
	at IceInternal.IncomingConnectionFactory.<init>(IncomingConnectionFactory.java:411)
	at Ice.ObjectAdapterI.<init>(ObjectAdapterI.java:1040)
	at IceInternal.ObjectAdapterFactory.createObjectAdapter(ObjectAdapterFactory.java:169)
	at Ice.CommunicatorI.createObjectAdapterWithEndpoints(CommunicatorI.java:101)
	at com.zgd.ice.service.impl.HelloServer.main(HelloServer.java:21)
Caused by: java.net.BindException: Address already in use: bind
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:433)
	at sun.nio.ch.Net.bind(Net.java:425)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
	at IceInternal.Network.doBind(Network.java:301)
	... 7 more
Address already in use: bind 解决端口号被占用_第3张图片
3.根据进程PID,输入命令 tasklist|findstr pid (pid为对应的进程编号),找到占用端口号的进程名称
根据端口号确认进程PID
4.输入命令 taskkill /f /t /im 进程名称,结束相关进程。在这里输入为taskkill /f /t /im javaw.exe
Address already in use: bind 解决端口号被占用_第4张图片
可以看到,占用端口号的进程已经被“杀死”,再次运行main程序可以正常执行。

注意:
一般来说,java执行过程中出现端口号占用的情况,而又不清楚占用的端口号是多少,则可以在任务管理器中直接“杀死” javaw.exe进程解决

Address already in use: bind 解决端口号被占用_第5张图片

你可能感兴趣的:(学海拾贝)