java.net.BindException: Address already in use: JVM_Bind异常的解决

  今天在学习socket通信的时候遇到了这个异常

package com.maheng.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	/**
	 * 基于TCP协议的socket通信
	 * Server
	 */
	public static void main(String[] args) {
		System.out.println("begin");
		try {
			//创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
			ServerSocket serverSocket = new ServerSocket(6789);
			//调用accept()方法开始监听,并等待客户端的连接			
			Socket socket = serverSocket.accept();
			System.out.println("server has started, waits for the client connection......");
			
			InputStream is = socket.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			String message;
			while( (message = br.readLine()) != null ){
				System.out.println("client: " + message );
			}
			socket.shutdownInput();
			//socket.close();
			br.close();
			isr.close();
			is.close();
			serverSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

  点运行,咦!怎么没有反应,server怎么没有启动!再点一次! 报错了!!(java.net.BindException: Address already in use: JVM_Bind)

换端口号还是同样的情况。

无奈之下只能用命令netstat -ano看一下各个端口的占用情况,发现刚刚输入的奇奇怪怪的端口号全部正在占用着,这个时候才醒悟过来,socket在等待客服端的接入,导致下面的打印语句没有输出,其实服务已经开启了...  于是乎,关闭应用程序,打印语句放到accept()方法上面,一切运行正常

总结:写程序要细致,低级错误就大骂自己SB,SB记住了没有?SB记住了....  

原文地址:https://www.cnblogs.com/maheng/p/4963611.html