freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java網(wǎng)絡(luò)通信程序的設(shè)計-資料下載頁

2025-01-04 09:19本頁面
  

【正文】 上面的例子是一個簡單的服務(wù)器程序 , 它啟動了一個 ServerSocket監(jiān)聽本機的 8189端口 , 這個端口一般不會被用到 。 當有其他客戶端請求與它聯(lián)接時 ,accept()方法將接受這個請求并創(chuàng)建一個獨立的 Socket實例 。 通過這個實例 , 我們可以取得輸入和輸出的兩個流 。 程序首先通過輸出流向客戶端發(fā)送了一條問候信息: (Hello! Please input. Enter quit to exit.)。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 然后 , 服務(wù)器程序接收來自客戶端的輸入 。 每次從客戶端讀取一行信息 , 就將這些輸入的字符串翻轉(zhuǎn)以后再送回給客戶端 , 所以這個服務(wù)器程序叫做ReversalSever。 編譯并運行這個程序,然后在 Windows命令行下輸入“ tel 8189”。 IP地址 的地址,稱為本機回送地址 (Local Loopback Address),它代表著本機。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 由于運行服務(wù)器程序的機器和啟動 tel測試的是同一主機 , 所以這個地址也正是我們要連接的 。 當然 ,也可以從其他機器上啟動 tel來測試這個服務(wù)器程序 ,這時候就必須 tel到運行服務(wù)器程序的 IP地址上 。 啟動 tel以后 , 輸入任何信息 , 看看結(jié)果是不是你想象的 , 最后輸入 quit結(jié)束連接 。 此處如輸入 “ 123456”,則結(jié)果如圖 。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 圖 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 多客戶通信機制 我們注意到 , 前面例子中的服務(wù)器程序只能服務(wù)于一個客戶端 , 也就是說 , 一個客戶連接到這個服務(wù)程序后 , 將一直獨占它 。 而通常情況下 , 我們看到的服務(wù)器總是要服務(wù)于許許多多的客戶端的 , 比如一個網(wǎng)頁服務(wù)器 , 可以接受許多客戶的瀏覽 。 利用線程的特性 , 我們就可以很好地解決服務(wù)于多個客戶的問題 。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 我們只需要對上面的程序做少許修改 , 就可以使它服務(wù)于多個客戶端 。 首先 , 應(yīng)該把主程序部分放入一個循環(huán) , 每接收到一個來自客戶端的請求 , 就啟動一個線程來處理他 。 而主程序則可以繼續(xù)等待來自其他客戶端的請求 。 下面看修改以后的程序 , 可試著啟動多個 tel連接它進行測試 。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 例 import .*。 import .*。 public class ThreadedReversalServer { public static void main(String[] agrs) { int i = 0。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 try { // 創(chuàng)建一個監(jiān)聽 8189端口的 ServerSocket ServerSocket s = new ServerSocket(8189)。 for (。) { // 啟動 ServerSocket的監(jiān)聽 Socket insock = ()。 (Thread + i + run.)。 // 啟動處理客戶端信息的線程 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 new ThreadReversal(insock, i).start()。 i++。 } } catch(IOException e) { ()。 } } } 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 class ThreadReversal extends Thread { private Socket sock。 private int counter。 public ThreadReversal(Socket s, int i) { sock = s。 counter = i。 } 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 public void run() { try { // 建立輸入流通道 BufferedReader in = new BufferedReader( new InputStreamReader(()))。 // 建立輸出流通道 PrintWriter out = 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 new PrintWriter((), true/*autoFlush*/)。 (Hello! Please input. Enter quit to exit.)。 while(true) { String line = ()。 if (null == line) continue。 if (().equals(quit)) break。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 else { // 翻轉(zhuǎn)輸入的字符串 StringBuffer rline = new StringBuffer()。 for (int i = ()。 i 0。 i) ((i 1))。 (Reversed: + ())。 } } 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 ()。 ()。 ()。 (Thread + counter + closed.)。 } catch(IOException e) { ()。 } } } 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 使用 UDP通信 前面一節(jié)我們學習了如何編寫 Socket的網(wǎng)絡(luò)程序,即基于 TCP(Transmission Control Protocol,傳輸控制協(xié)議 )的網(wǎng)絡(luò)編程。 TCP只能創(chuàng)建兩個計算機之間的可靠連接。一旦建立起一個 TCP連接,我們就不需要處理傳輸可靠性的問題,可以認為通過 Socket發(fā)送和接收數(shù)據(jù)的操作總是成功的。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 Java平臺也支持所謂的 UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議 )。 UDP可以發(fā)送數(shù)據(jù)報 , 但它的開銷比 TCP少得多 。 UDP的缺陷是它不保證數(shù)據(jù)發(fā)送的可靠性 , 數(shù)據(jù)接收到的順序可能和發(fā)送的順序不同 , 甚至還可能完全丟失數(shù)據(jù)報 。 程序設(shè)計者必須負責整理和驗證這些數(shù)據(jù)和請求重發(fā) 。 UDP特別適合容忍數(shù)據(jù)報部分丟失 , 而對實時性要求更高的應(yīng)用程序 , 例如語音傳輸?shù)?。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 DatagrameSocket和DatagramPacket這兩個類幫助我們實現(xiàn)基于 UDP的網(wǎng)絡(luò)程序設(shè)計。 DatagramSocket用于收發(fā)數(shù)據(jù)報,而DatagramPacket包含發(fā)送的具體信息。數(shù)據(jù)報到達時,通過 DatagramSocket,信息源的地址和端口將自動初始化,所以用于接收數(shù)據(jù)報的 DatagramPacket構(gòu)造方法為 DatagramPacket(byte[] buf, int length) 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 而發(fā)出一個數(shù)據(jù)報時, DatagramPacket不僅需要包含數(shù)據(jù)內(nèi)容,還要包含發(fā)送的地址以及端口,所以用于發(fā)送數(shù)據(jù)極的 DatagramPacket構(gòu)造方法為 DatagramPacket(byte[] buf, int length, IAddress address, int port) 下面我們看一個 UDP編程的例子。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 例 服務(wù)器程序 import .*。 import .*。 public class DayBcast { private DatagramSocket ds。 private DatagramPacket dp。 private IAddress addr。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 public static void main(String[] args) throws Exception { DayBcast db = new DayBcast(localhost)。 ()。 } public DayBcast(String target) throws Exception { addr = (target)。 ds = new DatagramSocket()。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 } public void go() throws Exception { byte[] buff。 for (。) { (1000)。 (Sending...)。 String s = (new Date()).toString()。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 buff = ()。 dp = new DatagramPacket(buff, , addr, 1313)。 (dp)。 } } } 客戶端程序 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 import .*。 public class DayWatch { private DatagramSocket ds。 private DatagramPacket dp。 public static void main(String args[]) throws Exception { DayWatch d = new DayWatch()。 ()。 } 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 public void go() throws Exception { byte[] buff = new byte[64]。 String s。 ds = new DatagramSocket(1313)。 dp = new DatagramPacket(buff, )。 for (。) { 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 (dp)。 s = new String(())。 (Time signal received form + () + \n Time is: + s)。 } } } 先運行服務(wù)器程序 , 再運行客戶端程序 , 客戶端將以 1 s的間隔不斷顯示當前的時間 。 服務(wù)器的運行狀態(tài)如圖 。 客戶端的運行狀態(tài)如圖 。 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 圖 第 11章 Java網(wǎng)絡(luò)通信程序的設(shè)計 圖
點擊復(fù)制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1