今天在學習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記住了....