官术网_书友最值得收藏!

4.2.1 服務器套接字

一旦啟動了服務器程序,它便會等待某個客戶端連接到它的端口。在我們的示例程序中,我們選擇端口號8189,因為所有標準服務都不使用這個端口。ServerSocket類用于建立套接字。在我們的示例中,下面這行命令:

用于建立一個負責監控端口8189的服務器。以下命令:

用于告訴程序不停地等待,直到有客戶端連接到這個端口。一旦有人通過網絡發送了正確的連接請求,并以此連接到了端口上,該方法就會返回一個表示連接已經建立的Socket對象。你可以使用這個對象來得到輸入流和輸出流,代碼如下:

服務器發送給服務器輸出流的所有信息都會成為客戶端程序的輸入,同時來自客戶端程序的所有輸出都會被包含在服務器輸入流中。

因為在本章的所有示例程序中,我們都要通過套接字來發送文本,所以我們將流轉換成掃描器和寫入器。

以下代碼將給客戶端發送一條問候信息:

當使用telnet通過端口8189連接到這個服務器程序時,將會在終端屏幕上看到上述問候信息。

在這個簡單的服務器程序中,它僅僅只是讀取客戶端輸入,每次讀取一行,并回送這一行。這表明程序接收到了客戶端的輸入。當然,實際應用中的服務器都會對輸入進行計算并返回處理結果。

在代碼的最后,我們關閉了連接進來的套接字。

這就是整個示例代碼的大致情況。每一個服務器程序,比如一個HTTP Web服務器,都會不間斷地執行下面這個循環:

1)通過輸入數據流從客戶端接收一個命令(“get me this information”)。

2)解碼這個客戶端命令。

3)收集客戶端所請求的信息。

4)通過輸出數據流發送信息給客戶端。

程序清單4-3給出了這個程序的完整代碼。

程序清單4-3 server/EchoServer.java

想要試一下這個例子,就請編譯并運行這個程序。然后使用telnet連接到服務器localhost(或IP地址127.0.0.1)和端口8189。

如果你直接連接到因特網上,那么世界上任何人都可以訪問到你的回送服務器,只要他們知道你的IP地址和端口號。

當你連接到該端口時,將看到如圖4-4所示的信息:

圖4-4 訪問一個回送服務器

可以隨意鍵入一條信息,然后觀察屏幕上的回送信息。輸入BYE(全為大寫字母)可以斷開連接,同時,服務器程序也會終止運行。

java.net.ServerSocket 1.0

·ServerSocket(int port)

創建一個監聽端口的服務器套接字。

·Socket accept()

等待連接。該方法阻塞(即,使之空閑)當前線程直到建立連接為止。該方法返回一個Socket對象,程序可以通過這個對象與連接中的客戶端進行通信。

·void close()

關閉服務器套接字。

主站蜘蛛池模板: 嘉黎县| 邳州市| 都昌县| 衡水市| 南川市| 东丰县| 辽源市| 卢龙县| 景德镇市| 茌平县| 临城县| 大宁县| 嘉祥县| 孟连| 河西区| 翼城县| 伊金霍洛旗| 曲水县| 巍山| 恩施市| 青州市| 聂拉木县| 平果县| 木兰县| 广昌县| 唐海县| 花莲市| 华阴市| 莱西市| 大厂| 咸阳市| 贵德县| 焦作市| 新巴尔虎左旗| 台山市| 青海省| 太湖县| 安义县| 吴川市| 洛阳市| 房产|