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記住了....  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM