Java網絡編程基礎 ServerSocket類使用

發表于:2007-06-10來源:作者:點擊數: 標簽:
由于SSClient使用了流套接字,所以服務程序也要使用流套接字。 這就要創建一個ServerSocket對象,ServerSocket有幾個構造函數,最簡單的是ServerSocket(int port),當使用ServerSocket(int port)創建一個ServerSocket對象,port參數傳遞端口號,這個端口就是

由于SSClient使用了流套接字,所以服務程序也要使用流套接字。

這就要創建一個ServerSocket對象,ServerSocket有幾個構造函數,最簡單的是ServerSocket(int port),當使用ServerSocket(int port)創建一個ServerSocket對象,port參數傳遞端口號,這個端口就是服務器監聽連接請求的端口,如果在這時出現錯誤將拋出IOException異常對象,否則將創建ServerSocket對象并開始準備接收連接請求。

接下來服務程序進入無限循環之中,無限循環從調用ServerSocket的aclearcase/" target="_blank" >ccept()方法開始,在調用開始后accept()方法將導致調用線程阻塞直到連接建立。在建立連接后accept()返回一個最近創建的Socket對象,該Socket對象綁定了客戶程序的IP地址或端口號。

由于存在單個服務程序與多個客戶程序通訊的可能,所以服務程序響應客戶程序不應該花很多時間,否則客戶程序在得到服務前有可能花很多時間來等待通訊的建立,然而服務程序和客戶程序的會話有可能是很長的(這與電話類似),因此為加快對客戶程序連接請求的響應,典型的方法是服務器主機運行一個后臺線程,這個后臺線程處理服務程序和客戶程序的通訊。

為了示范我們在上面談到的慨念并完成SSClient程序,下面我們創建一個SSServer程序,程序將創建一個ServerSocket對象來監聽端口10000的連接請求,如果成功服務程序將等待連接輸入,開始一個線程處理連接,并響應來自客戶程序的命令。下面就是這段程序的代碼:

Listing 3: SSServer.java

運行這段程序將得到下面的輸出:

Server starting...

Accepting Connection...

Closing Connection...

SSServer的源代碼聲明了一對類:SSServer 和ServerThread;SSServer的main()方法創建了一個ServerSocket對象來監聽端口10000上的連接請求,如果成功, SSServer進入一個無限循環中,交替調用ServerSocket的 accept() 方法來等待連接請求,同時啟動后臺線程處理連接(accept()返回的請求)。線程由ServerThread繼承的start()方法開始,并執行ServerThread的run()方法中的代碼。

一旦run()方法運行,線程將創建BufferedReader, PrintWriter和 Calendar對象并進入一個循環,這個循環由讀(通過BufferedReader的 readLine())來自客戶程序的一行文本開始,文本(命令)存儲在cmd引用的string對象中,如果客戶程序過早的關閉輸出流,會發生什么呢?答案是:cmd將得不到賦值。

注意必須考慮到這種情況:在服務程序正在讀輸入流時,客戶程序關閉了輸出流,如果沒有對這種情況進行處理,那么程序將產生異常。

一旦編譯了SSServer的源代碼,通過輸入Java SSServer來運行程序,在開始運行SSServer后,就可以運行一個或多個SSClient程序。

原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97