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

正文內容

基于socket的網絡聊天系統開發(fā)與設計畢業(yè)論文(編輯修改稿)

2025-07-15 16:40 本頁面
 

【文章內容簡介】 傳輸資料所用時間也會變化不定。TCP 協議具有自動調整超時值的功能,能很好地適應 Inter 上各種各樣的變化,確保傳輸數值的正確。 因此,從上面我們可以了解到:IP 協議只保證計算機能發(fā)送和接收分組資料,而 TCP 協議則可提供一個可靠的、可流控的、全雙工的信息流傳輸服務。 綜上所述,雖然 IP 和 TCP 這兩個協議的功能不盡相同,也可以分開單獨使用,但它們是在同一時期作為一個協議來設計的,幷且在功能上也是互補的。只有兩者的結合,才能保證 Inter 在復雜的環(huán)境下正常運行。凡是要連接到 Inter 的計算機,都必須同時安裝和使用這兩個協議,因此在實際中常把這兩個協議統稱作 TCP/IP 協議。 Socket 編程Socket 接口是訪問 Inter 使用得最廣泛的方法。 如果你有一臺剛配好 TCP/IP 協議的主機,其 IP 地址是 , 此時在另一臺主機或同一臺主機上執(zhí)行 ftp ,顯然無法建立連接。因 這臺主機沒有運行 FTP 服務軟件。同樣, 在另一臺或同一臺主機上運行瀏覽軟件 如 Netscape,輸入法建立連接。現在,如果在這臺主機上運行一個 FTP 服務軟件(該軟件將打開一個 Socket, 并將其綁定到 21 端口) ,再在這臺主機上運行一個 Web 服務軟件(該軟件將打開另一個 Socket,并將其綁定到 80 端口) 。這樣,在另一臺主機或同一臺主機上執(zhí)行 ftp , FTP 客戶軟件將通過 21 端口來呼叫主機上由 FTP 服務軟件提供的 Socket,與其建立連接并對話。而在scape 中輸入 80 端口來呼叫主機上由 Web 服務軟件提供的 Socket,與其建 立連接并對話。 在 Inter 上有很多這樣的主機,這些主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個 Socket,并綁定到一個端口上,不同的端口對應于不同的服務。Socket 正如其英文原意那樣,象一個多孔插座。一臺主機猶如布滿各種插座的房間,每個插座有一個編號,有的插座提供 220 伏交流電, 有的提供 110 伏交流電,有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號的插座,就可以得到不同的服務。在 Java 中所謂 Socket 通常也稱作套接字,用于描述 IP 地址和端口,是一個通信鏈的句柄。應用程序通常通過套接字向網絡發(fā)出請求或者應答網絡請求。 以 為例,Socket 和 ServerSocket 類庫位于 包中。ServerSocket 用于服務器端,Socket 是建立網絡連接時使用的。在連接成功時,應用程序兩端都會產生一個 Socket 實例,操作這個實例,完成所需的會話。對于一個網絡連接來說,套接字是平等的,并沒有差別,不因為在服務器端或在客戶端而產生不同級別。不管是 Socket 還是 ServerSocket 它們的工作都是通過 SocketImpl 類及其子類完成的。重要的 Socket API: 繼承于 ,有八個構造器,其方法并不多,下面介紹使用最頻繁的三個方法,其它方法可以參見 文檔。Accept 方法用于產生阻塞,直到接受到一個連接,并且返回一個客戶端的 Socket 對象實例。阻塞是一個術語,它使程序運行暫時停留在這個地方,直到一個會話產生,然后程序繼續(xù);通常阻塞是由循環(huán)產生的。 getInputStream 方法獲得網絡連接輸入,同時返回一個 InputStream 對象實例。 getOutputStream 方法連接的另一端將得到輸入,同時返回一個OutputStream 對象實例。 注意:其中 getInputStream 和 getOutputStream 方法均可能會產生一個 IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。 服務器,使用 ServerSocket 監(jiān)聽指定的端口,端口可以隨意指定(由于1024 以下的端口通常屬于保留端口,在一些操作系統中不可以隨意使用,所以建議使用大于 1024 的端口) ,等待客戶連接請求,客戶連接后,會話產生;在完成會話后,關閉連接。 客戶端,使用 Socket 對網絡上某一個服務器的某一個端口發(fā)出連接請求,一旦連接成功,打開會話;會話完成后,關閉 Socket。客戶端不需要指定打開的端口,通常臨時的、動態(tài)的分配一個 1024 以上的端口。Socket 接口是 TCP/IP 網絡的 API,Socket 接口定義了許多函數或例程,程序員可以用它們來開發(fā) TCP/IP 網絡上的應用程序。要學 Inter 上的TCP/IP 網絡編程,必須理解 Socket 接口。 Socket 接口設計者最先是將接口放在 Unix 操作系統里面的。如果了解 Unix 系統的輸入和輸出的話,就很容易了解 Socket 了。網絡的 Socket 數據傳輸是一種特殊的 I/O,Socket 也是一種文件描述符。Socket 也具有一個類似于打開文件的函數調用 Socket(),該函數返回一個整型的 Socket 描述符,隨后的連接建立、數據傳輸等操作都是通過該Socket 實現的。 Swing 簡介Swing 是一個用于開發(fā) Java 應用程序用戶界面的開發(fā)工具包。它以抽象窗口工具包(AWT)為基礎使跨平臺應用程序可以使用任何可插拔的外觀風格。Swing 開發(fā)人員只用很少的代碼就可以利用 Swing 豐富、靈活的功能和模塊化組件來創(chuàng)建優(yōu)雅的用戶界面。Swing 的產生主要原因就是 AWT 不能滿足圖形化用戶界面發(fā)展的需要。AWT設計的初衷是支持開發(fā)小應用程序的簡單用戶界面。例如 AWT 缺少剪貼板、打印支持、鍵盤導航等特性,而且原來的 AWT 甚至不包括彈出式菜單或滾動窗格等基本元素。此外 AWT 還存在著嚴重的缺陷,人們使 AWT 適應基于繼承的、具有很大伸縮性的事件模型,基于同位體的體系結構也成為其致命的弱點。隨著發(fā)展的需要,Swing 出現了,Swing 組件幾乎都是輕量組件,與重量組件相比,沒有本地的對等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。這一講我們講一下基本的 Swing 組件使用方法和使用 Swing 組件創(chuàng)建用戶界面的初步方法。Swing 是由 100%純 Java 實現的,Swing 組件是用 Java 實現的輕量級( lightweight)組件,沒有本地代碼,不依賴操作系統的支持,這是它與 AWT組件的最大區(qū)別。由于 AWT 組件通過與具體平臺相關的對等類(Peer)實現,因此 Swing 比 AWT 組件具有更強的實用性。Swing 在不同的平臺上表現一致,并且有能力提供本地窗口系統不支持的其它特性。Swing 采用了一種 MVC 的設計范式,即模型視圖控制(ModelViewController) ,其中模型用來保存內容,視圖用來顯示內容,控制器用來控制用戶輸入。Swing 外觀感覺采用可插入的外觀感覺(Pluggable Look and Feel,PLamp。F)在 AWT 組件中,由于控制組件外觀的對等類與具體平臺相關,使得 AWT 組件總是只有與本機相關的外觀。Swing 使得程序在一個平臺上運行時能夠有不同的外觀。用戶可以選擇自己習慣的外觀。 多線程技術介紹多線程是這樣一種機制,它允許在程序中并發(fā)執(zhí)行多個指令流,每個指令流都稱為一個線程,彼此間互相獨立。線程又稱為輕量級進程,它和進程一樣擁有獨立的執(zhí)行控制,由操作系統負責調度,區(qū)別在于線程沒有獨立的存儲空間,而是和所屬進程中的其它線程共享一個存儲空間,這使得線程間的通信遠較進程簡單。多個線程的執(zhí)行是并發(fā)的,也就是在邏輯上“同時” ,而不管是否是物理上的“同時” 。如果系統只有一個 CPU,那么真正的“同時”是不可能的,但是由于 CPU 的速度非常快,用戶感覺不到其中的區(qū)別,因此我們也不用關心它,只需要設想各個線程是同時執(zhí)行即可。多線程和傳統的單線程在程序設計上最大的區(qū)別在于,由于各個線程的控制流彼此獨立,使得各個線程之間的代碼是亂序執(zhí)行的,由此帶來的線程調度,同步等問題。(1)在 Java 中實現多線程。我們不妨設想,為了創(chuàng)建一個新的線程,我們需要做些什么?很顯然,我們必須指明這個線程所要執(zhí)行的代碼,而這就是在 Java 中實現多線程我們所需要做的一切!真是神奇!Java 是如何做到這一點的?通過類!作為一個完全面向對象的語言,Java 提供了類 來方便多線程編程,這個類提供了大量的方法來方便我們控制自己的各個線程,我們以后的討論都將圍繞這個類進行。那么如何提供給 Java 我們要線程執(zhí)行的代碼呢?讓我們來看一看 Thread 類。Thread 類最重要的方法是 run(),它為 Thread 類的方法 start()所調用,提供我們的線程所要執(zhí)行的代碼。為了指定我們自己的代碼,只需要覆蓋它!方法一:繼承 Thread 類,覆蓋方法 run(),我們在創(chuàng)建的 Thread 類的子類中重寫 run() ,加入線程所要執(zhí)行的代碼即可。下面是一個例子:public class MyThread extends Thread { int count= 1, number。 public MyThread(int num){ number = num。 (創(chuàng)建線程 + number)。 } public void run() { while(true) { (線程 + number + :計數 + count)。 if(++count== 6) return。 } } public static void main(String args[]){ for(int i = 0。 i 〈 5。 i++) new MyThread(i+1).start()。 } }這種方法簡單明了,符合大家的習慣,但是,它也有一個很大的缺點,那就是如果我們的類已經從一個類繼承(如小程序必須繼承自 Applet 類) ,則無法再繼承 Thread 類,這時如果我們又不想建立一個新的類,應該怎么辦呢? 我們不妨來探索一種新的方法:我們不創(chuàng)建 Thread 類的子類,而是直接使用它,那么我們只能將我們的方法作為參數傳遞給 Thread 類的實例,有點類似回調函數。但是 Java 沒有指針,我們只能傳遞一個包含這個方法的類的實例。 那么如何限制這個類必須包含這一方法呢?當然是使用接口?。m然抽象類也可滿足,但是需要繼承,而我們之所以要采用這種新方法,不就是為了避免繼承帶來的限制嗎?) Java 提供了接口 來支持這種方法。 方法二:實現 Runnable 接口 Runnable 接口只有一個方法 run(),我們聲明自己的類實現 Runnable 接口并提供這一方法,將我們的線程代碼寫入
點擊復制文檔內容
醫(yī)療健康相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1