導航:首頁 > 編程大全 > socket網路

socket網路

發布時間:2023-03-27 19:40:49

A. 網路(五):socket



服務端socket要做五件事,客戶端socket要做三件事:

接下來雙方就可以通過 read() 和 write() 函數通信了,雙方也都可以通過 close() 函數主動斷開連接。


上面的例子中,我們預期的效果是客戶端點擊一次發送,給服務端發送兩條數據,服務端觸發兩次「收到客戶端數據的回調」,然後分別列印:

但實際上兩條數據被合並成一條數據發送給服務端了,服務端只觸發了一次「收到客戶端數據的回調」,也只列印了一次:

這就是 數據粘包——多條數據被合並成了一條數據傳輸。

我們知道TCP有個 發送緩存 ,有些情況下TCP並不是有一條數據就發一條數據,而是等發送緩存滿了,再把發送緩存里的多條數據一起發送出去,這就會導致數據粘包。

此外TCP還採用了 Nagle優化演算法 來打包數據,它會將多次間隔較小且數據量較小的數據自動合並成一知滲個比較大的數據一塊兒傳輸,這也會導致數據粘包。

處理數據粘包也很簡單,核心思路就是: 發送方在發送數據的時候先給每條數據都添加一個包頭,包頭里存放的關鍵信息就是真實數據的長度,當然也可以存放更多的業務信息,此外包頭的尾部還需要拼接一個包頭結束標識——回車換行符,以便將來接收方讀取數據時可以根據這個包頭結束標識優先讀取到包頭數據。接收方調用指定的讀取方法優先讀取到包頭數據,然後根據包頭里的長度信息再去精準讀取指定長度的真實數據,這樣就可以讀取到一條完整的數據了,然後再讀取下一條數據就不會粘包了。

正常來說,socket連接一旦建立之後就會一直掛在那裡搭念脊,直到某一端主動斷開連接。但實際上,運營高友商在檢測到鏈路上有一段時間無數據傳輸時,就會自動斷開這種處於非活躍狀態的連接,這就是所謂的運營商NAT超時,超時時間為5分鍾。 因此我們就需要做心跳保活——即客戶端每隔一定的時間間隔就向服務端發送一個心跳數據包,用來保證當前socket連接處於活躍狀態,避免運營商把我們的連接中斷,這個時間間隔我們取的是3分鍾,伺服器在收到心跳包時不當做真實數據處理即可。

客戶端主動斷開連接時(如App退出登錄或者App進入後台等場景),我們不需要做斷線重連;其它情況下如果連接斷開了(如伺服器出了問題或者網斷了等場景),我們就需要做斷線重連,來盡量使連接處於正常連接的狀態,這樣才能保證業務的正常運行。 具體做法就是,當客戶端檢測到跟服務端斷開連接時就啟動第一次斷線重連,2秒後啟動第二次斷線重連,再隔4秒後啟動第三次斷線重連,如果三次斷線重連還沒成功,就認為是伺服器出了問題,不再重連。

B. Socket詳解

1、 Socket(套接字)概念

網路上兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一段稱為一個 socket ,socket是通信的基石,是支持TCP/IP協議的網路通信的基本操作單元。它是網路通信過程中端點的抽象表示,包含進行網路通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進襪橡程的協議埠,遠地主機的IP地址,遠地進程的協議埠。

Socket是對TCP/IP協議的封裝,它把復雜的TCP/IP協議族隱藏在Socket介面後面,提供一個易用的介面,所以Socket本身並不是協議,而是一個調用介面(API)。

在一定程度可以認為Socket位於應用層和傳輸層之間。創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。

2、 建立Socket連接

建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket,另一個運行於伺服器端,稱為ServerSocket。

套接字之間的連接過程分為 三個步驟 :

(1)伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。

(2)客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。

(3)連接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶 端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。

3、 Socket連接與HTTP連接

由於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網路應用 中,客戶端到伺服器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網路,該連接處於活躍狀態。

而HTTP連接使用的是「請求—響應」的方式,不僅在請求時需要先建立連接,而且需要客戶端向伺服器發出請求後,伺服器端才能回復數據。

4、 關於Socket長連接的心跳包

心跳包就是為了避免一個連接長時間不活躍被關閉而定時發送的一個」騷擾」數據包。

Socket本身就是長連接的,那麼為什麼還要心跳包呢?

理論上說,這個連接是一直保持連接的,但是實際情況中,如果中間節點出現什麼故障是難以知道的。更要命的是,有的節點(防火牆)會自動把一定時間之內沒有數據交互的連接給斷掉。在這個時候,就需要我們的心跳包了,用於維持粗好老長連接,保活。在獲知了斷線之後,伺服器邏輯可能需要做一些事情,比如斷線後的數據清理,重新連接……當然,這個自然是要由邏輯層根據需求去做了。總的來說,心跳包主要也就是用於長連接的保活和斷線處理。一般的應用下,判定時間在30-40秒比較不錯。如果實在要求高,那就在6-9秒。

如果不主動關閉socket的話,系統不會自動關閉的,除非當前進程掛掉了,操作系統把佔用的socket回收了才會關閉。為什麼需要心跳連接?主要是為了判斷當前連接是否是有效的、可被使用的。在實際應用中假設一段時間沒有數據傳輸時候理論上說應該連接是沒有問題的,但是網路復雜,中途出現問題也是常見的,網線被掐斷了、對方進程掛掉了、頻繁丟包等,這時候TCP連接是不可使用的,但是對於應用層並不知道,如果需知道網路情況則要很復雜的超時進行了解,TCP從底層就實現了這樣的功能。心跳機制是TCP在一段時間間隔後發送確認連接端是否還存在,如果存在的話就會回傳一個包確定網路有效,如果岩升心跳包有問題,則通知上層應用當前網路有問題了。

這取決於你的server端的超時配置, 每個socket連接都是長連接,它是一個相當佔用系統資源的通信管道, 如果這個長連接什麼事也沒干硬是要佔著資源,則server端可以選擇關閉這個連接,以省下資源讓更多的用戶連接進來。

所以,即便客戶端的是採用死循環while(true)方式連到服務端,對於特定的客戶端和服務端類型來說也需要一定時間間隔的心跳(告訴服務端,我還活著,雖然我沒幹活也沒說話,但別把我關了)

C. 到底什麼是Socket

本系列文章前面那些主要講解的是計算機網路的理論基礎,但對於即時通訊IM這方面的應用層開發者來說,跟計算機網路打道的其實是各種API介面。

本篇文章就來聊一下網路應用程序員最熟悉的Socket這個東西,拋開生澀的計算機網路理論,從應用層的角度來理解到底什純喊么是Socket。

對於 Socket 的認識,本文將從以下幾個方面著手介紹:

1) Socket 是什麼;

2) Socket 是如何創建的;

3) Socket 是如何連接的;

4) Socket 是如何收發數據的;

5) Socket 是如何斷開連接的;

6) Socket 套接字的刪除等。

特別說明: 本文中提到的「Socket」、「網路套接字」、「套接字」,如無特殊指明,指的都是同一個東西哦。

Socket 是什麼

一個數據包經由應用程序產生,進入到協議棧中進行各種報文頭的包裝,然後操作系統調用網卡驅動程序指揮硬體,把數據發送到對端主機。

我們大家知道,協議棧其實是位於操作系統中的一些協議的堆疊,這些協議包括 TCP、UDP、ARP、ICMP、IP等。即時通訊開發可以找蔚可雲開發。

通常某個協議的設計都是為了解決特定問題的,比如:

1) TCP 的設計就負責安全可靠的傳激盯輸數據;

2) UDP 設計就是報文小,傳輸效率高;

3) ARP 的設計是能夠通過 IP 地址查詢物理(Mac)地址;

4) ICMP 的設計目的是返回錯誤報文給主機;

5) IP 設計的目的是為了實現大規模主機的互聯互通。

應用程序比如瀏覽器、電子郵件、文件傳輸伺服器等產生的數據,會通過傳輸層協議進行傳輸。而應用程序是不會和傳輸層直接建立聯系的,而是有一個能夠連接應用層和傳輸層之間的套件,這個套件就是 Socket 。

應用程序的下面: 就是操作系統內部,操作系統內部包括協議棧,協議棧是一系列協議的堆疊。

操作系統下面: 就是網卡驅動程序,網卡驅動程序負責控制網卡硬體,驅動程序驅動網卡硬體完成收發工作。

在操作系統內部有一塊用於存放控制信息的存儲空明褲和間,這塊存儲空間記錄了用於控制通信的控制信息。其實這些控制信息就是 Socket 的實體,或者說存放控制信息的內存空間就是Socket的實體。

這里大家有可能不太清楚所以然,所以我用了一下 netstat 命令來給大夥看一下Socket是啥玩意。

Socket 是如何創建的

通過上節的講解,現在你可能對 Socket 有了一個基本的認識,先喝口水,休息一下,讓我們繼續探究 Socket。

現在我有個問題, Socket 是如何創建的呢?

Socket 是和應用程序一起創建的。

應用程序中有一個 socket 組件,在應用程序啟動時,會調用 socket 申請創建Socket,協議棧會根據應用程序的申請創建Socket:首先分配一個Socket所需的內存空間,這一步相當於是為控制信息准備一個容器,但只有容器並沒有實際作用,所以你還需要向容器中放入控制信息;如果你不申請創建Socket所需要的內存空間,你創建的控制信息也沒有地方存放,所以分配內存空間,放入控制信息缺一不可。至此Socket的創建就已經完成了。

Socket創建完成後,會返回一個Socket描述符給應用程序,這個描述符相當於是區分不同Socket的號碼牌。根據這個描述符,應用程序在委託協議棧收發數據時就需要提供這個描述符。

Socket 是如何連接的

Socket創建完成後,最終還是為數據收發服務的。但是,在數據收發之前,還需要進行一步「連接」(術語就是 connect),建立連接有一整套過程。

實際上這個「連接」是應用程序通過 TCP/IP 協議標准從一個主機通過網路介質傳輸到另一個主機的過程。

Socket剛剛創建完成後,還沒有數據,也不知道通信對象。

在這種狀態下: 即使你讓客戶端應用程序委託協議棧發送數據,它也不知道發送到哪裡。所以瀏覽器需要根據網址來查詢伺服器的 IP 地址,查詢到目標主機後,再把目標主機的 IP 告訴協議棧。至此,客戶端這邊就准備好了。

在伺服器上: 與客戶端一樣也需要創建Socket,但是同樣的它也不知道通信對象是誰,所以我們需要讓客戶端向伺服器告知客戶端的必要信息: IP 地址和埠號 。

現在通信雙方建立連接的必要信息已經具備,可以開始「連接」過程了。

首先: 客戶端應用程序需要調用 Socket 庫中的connect方法,提供 socket 描述符和伺服器 IP 地址、埠號。

以下是connect的偽碼調用:

1connect(<描述符>、<伺服器IP地址和埠號>)

這些信息會傳遞給協議棧中的 TCP 模塊,TCP 模塊會對請求報文進行封裝,再傳遞給 IP 模塊,進行 IP 報文頭的封裝,然後傳遞給物理層,進行幀頭封裝。

之後通過網路介質傳遞給伺服器,伺服器上會對幀頭、IP 模塊、TCP 模塊的報文頭進行解析,從而找到對應的Socket。

Socket收到請求後,會寫入相應的信息,並且把狀態改為正在連接。

請求過程完成後: 伺服器的 TCP 模塊會返回響應,這個過程和客戶端是一樣的

Socket 是如何收發數據的

當控制流程上節中的連接過程回到應用程序之後,接下來就會直接進入數據收發階段。

數據收發操作是從應用程序調用 write 將要發送的數據交給協議棧開始的,協議棧收到數據之後執行發送操作。

協議棧不會關心應用程序傳輸過來的是什麼數據,因為這些數據最終都會轉換為二進制序列,協議棧在收到數據之後並不會馬上把數據發送出去,而是會將數據放在發送緩沖區,再等待應用程序發送下一條數據。

為什麼收到數據包不會直接發送出去,而是放在緩沖區中呢?

因為只要一旦收到數據就會發送,就有可能發送大量的小數據包,導致網路效率下降(所以協議棧需要將數據積攢到一定數量才能將其發送出去)。

至於協議棧會向緩沖區放多少數據,這個不同版本和種類的操作系統有不同的說法。

D. 【計算機網路】Socket

socket進行通信的方式如下:

使用socket()系統調用能夠創建一個socket,它返回一個用來在後續系統調用中引用該socket的文件描述符。

socket存在於一個通信domain中,它確定:

現在操作系統支持下列domain:

每個socket實現都至少提供了兩種socket:流和數據報。這兩種類型在UNIX和Internet domain中都得到了支持。

流socket提供了一個可靠的雙向的位元組流通信信道:

數據報socket允許數據以數據報的形式進行交換。在使用時無需與另一個socket簡歷連接。

傳入bind()的addr比較復雜,每種socket domain都使用了不同的地址格式,如UNIX domain socket使用路徑名,而Internet domain socket 使用IP地址和埠號。struct sockaddr適用於所有domain,將各種domain特定的地址結構轉換成單個類型以供socket系統調用中的各個參數使用。

socket I/O 可以使用傳統的read()和write()系統調用或使用一組socket特有的系統調用send() recv() sendto() recvfrom()。默認情況下,這些系統調用在I/O操作無法被立即完成時阻塞,使用fcntl() F_SETFL 操作用啟用 O_NONBLOCK 打開文件狀態標記可以執行非阻塞I/O

listen()系統調用將文件描述符sockfd引用的流socket標記為被動,這個socket後面會被用來接受來自其他(主動的)socket的鏈接。

無法再一個已連接的socket(已成功執行connect()的socket或由accept()調用返回的socket)上執行 listen()

如果伺服器正忙於處理其他客戶端,那麼客戶端的connect()可能並不能馬上被accept(),這將產生一個未決的連接。

內核必須要記錄所有未決的連接請求的相關信息,backlog參數允許限制這種未決連接的數量。在這個限制之內的連接請求會立即成功,之外的連接請求就會阻塞直到一個未決的連接被接受,並從未決連接隊列中刪除。

accept()系統調用會文件描述符sockfd引用的監聽流socket上接受一個連入連接。如果在調用accept時不存在未決的連接,那麼調用會阻塞直到有連接請求到達為止。

返回的結果是已連接的socket的文件描述符。addr參數指向一個用來返回socket地址的結構。

一對連接的流 socket 在兩個端點之間提供了一個雙向通信信道。

關閉一個連接之後,對等應用程序讀取數據時將會收到文件結束(所有緩沖數據都讀取之後),如果要寫入數據,會收到一個SIGPIPE信號,並且系統調用返回EPIPE錯誤。

無法保證順序,也無法保證能夠到達。由於底層協議有時會重新傳包,也可能多次到達。

盡管數據報socket是無連接的,但在數據報socket上應用connect()系統調用仍然起作用,會導致內核記錄這個socket的對等socket地址。

當一個數據報socket已連接後:

在UNIX domain中,socket地址以路徑名來表示,domain特定的socket地址結構的定義如下:

為將一個UNIX domain socket綁定到一個地址上,需要初始化一個sockaddr_un結構,然後將指向這個結構的一個指針作為addr參數傳入bind()並將addrlen指定為這個結構的大小。

當用來綁定UNIX domain socket時,bind()會在文件系統中創建一個條目,作為socket路徑名的一部分的目錄需要可訪問和可寫。這個文件會被標記為一個socket,當再這個路徑名上應用stat()時,它會在stat結構的st_mode欄位中的文件類型部分返回值S_IFSOCK。

盡管UNIX domain socket是通過路徑名來標識的,但這些socket上發生的I/O無須對底層設備進行操作。

有關綁定一個UNIX domain socket的注意點:

伺服器流程:

客戶端流程:

對於UNIX domain socket來說,數據報的傳輸是在內核中發生的,也是可靠的,所有消息都會按序被遞送並且不會發生重復的狀況。

伺服器創建socket後並綁定後,進入一個無線循環,在循環中使用recvfrom()接收來自客戶端的數據報,將接收到的文本轉換成大小格式並使用通過recvfrom()獲取的地址將轉換過的文本返回給客戶端。

socket文件的所有權和許可權決定了哪些進程能夠與這個socket進行通信

有時候讓單個進程創建一對socket並將它們連接起來是比較有用的。

允許將一個UNIX domain socket綁定到一個名字上但不會在文件系統中創建的名字

要傳輸數據,數據鏈路層需要將網路層傳遞過來的數據報封裝進被稱為幀的一個一個單元。最大傳輸單元MTC是改層所能傳輸的幀大小的上限。

網路層任務:

網路層的協議是IP,IPv4使用32位地址來標識子網和主機,IPv6則使用了128位的地址。

一個裸socket(SOCK_RAW),允許程序直接與IP層進行通信,但大多數都會基於一種傳輸層協議之上的socket。

IP以數據報(包)的形式來傳輸數據。在兩個主機之間發送的每一個數據報都是在網路上獨立傳輸的,它們經過的路徑可能會不同。一個IP數據報包含一個頭,其大小范圍為20位元組到60位元組。包含目標主機的地址,源地址。

一個IP實現可能會給它所支持的數據報的大小設定一個上限。所有IP實現都必須做到數據報的大小上限至少與規定的IP最小重組緩沖區大小一樣大。IPv4限制值是576位元組,IPv6是1500位元組。

IP是一種無連接協議,並沒有在相互連接的兩個主機之間提供一個虛擬電路。

IP是一種不可靠的協議:盡最大可能將數據報從發送者傳輸給接收者,但並不保證包到達的順序與它們被傳輸的順序一致,也不保證是否重復,甚至到達。IP也美譽錯誤恢復。可靠性是通過使用TCP來保證的。

IPv4為IP頭提供了一個校驗和,這樣能夠檢測出頭中的錯誤,但並沒有為包中所傳輸的數據提供任何錯誤檢測機制。IPv6並沒有為IP頭提供校驗和,它依賴高層協議來完成錯誤檢測和可靠性。

IP數據報的重復使可能發生的,數據鏈路層採用一些技術確保可靠性以及IP數據報可能會以隧道形式穿越採用了重傳機制。

IP會將數據報分段成一個個大小合適的傳輸單元,這些分段在到達最終目的之後會被重組成原始的數據報(每個IP分段本身就包含一個偏移量)

E. socket是什麼

Socket是英文「插座」的意思,它在計算機領域中指的是一種網路編程介面。

socket 網路編程

Socket通信可以使用不同的凱猜仿協議,如TCP、UDP等。其中,TCP協議是一種可靠的協議,保證數據傳輸的完整性和可盯纖靠性,通常用於重要數據的傳輸。而UDP協議則是一種不可靠的協議,傳輸速度更快,但可能會存在數據兆唯丟失或冗餘。
Socket技術被廣泛應用於各種網路應用程序的開發和實現,如Web伺服器、聊天軟體、網路游戲等。

F. 什麼是socket網路什麼是C-S結構

套接字Socket是指向基於網路的另一個應用程序的通信連的引用。應用程序通常通過套接字向網路發出請求或者答應網路請求。socket大致位於會話層。c/s結構就是客戶機伺服器模式。其中一台或者幾台較大的計算機集中進行共享資料庫的管理和存取,稱為伺服器。其他的應用處理工作分散到網路上其他計算機上進行。B/s就是中庸伺服器結構,由若干個微機工作站與一台或者多台文件伺服器通過通信鏈路連接。比如超市的收銀機。

G. socket是什麼呀

套接字(Socket),就是對網路中不同主機上的應用進程之間進行雙向通信的端點的抽象。

一個套接字就是網路上進程通信的一端,提供了應用層進程利用網路協議交換數據的機制。從所處的地位來講,套接字上聯應用進程,下聯網路協議棧,是應用程序通過網路協議進行通信的介面,是應用程序與網路協議根進行交互的介面。

套接字是通信的基石,是支持TCP/IP協議的路通信的基本操作單元。

可以將套接字看作不同主機間的進程進行雙間通信的端點,它構成了單個主機內及整個網路間的編程界面。套接字存在於通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。

套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序),各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。

Socket(套接字)可以看成是兩個網路應用程序進行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網路環境中進程間通信的API(應用程序編程介面),也是可以被命名和定址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進程。

通信時其中一個網路應用程序將要傳輸的一段信息寫入它所在主機的 Socket中,該 Socket通過與網路介面卡(NIC)相連的傳輸介質將這段信息送到另外一台主機的 Socket中,使對方能夠接收到這段信息。

Socket是由IP地址和埠結合的,提供向應用層進程傳送數據包的機制。

類型

1、數據報套接字

無連接套接字,使用用戶數據報協議(UDP)。在數據報套接字上發送或接收的每個數據包都單獨定址和路由。數據報套接字不能保證順序和可靠性,因此從一台機器或進程發送到另一台機器或進程的多個數據包可能以任何順序到達或可能根本不到達。在數據報套接字上發送廣播可能需要特殊配置。

為了接收廣播數據包,數據報套接字不應該綁定到特定地址,盡管在某些實現中,當數據報套接字綁定到特定地址時也可能接收廣播數據包。

2、流套接字

面向連接的套接字,使用傳輸控制協議(TCP)、流控制傳輸協議(SCTP) 或數據報擁塞控制協議(DCCP)。流套接字提供了無記錄邊界的有序且獨特的無錯誤數據流,並具有用於創建和銷毀連接以及報告錯誤的明確定義的機制。

流套接字以帶外功能可靠地、有序地傳輸數據。在 Internet 上,流套接字通常使用 TCP 實現,以便應用程序可以使用 TCP/IP 協議在任何網路上運行。

3、原始套接字

允許直接發送和接收 IP 數據包,無需任何特定於協議的傳輸層格式。對於其他類型的套接字,根據選擇的傳輸層協議(例如 TCP、UDP)自動封裝有效載荷,並且套接字用戶不知道與有效載荷一起廣播的協議頭的存在。從原始套接字讀取時,通常包含標頭。

從原始套接字傳輸數據包時,自動添加標頭是可選的。

大多數套接字應用程序編程介面(API),例如基於Berkeley 套接字的那些,支持原始套接字。Windows XP於 2001 年發布,在Winsock介面中實現了原始套接字支持,但三年後,微軟出於安全考慮限制了 Winsock 的原始套接字支持。

原始套接字用於與安全相關的應用程序,如Nmap。原始套接字的一個用例是在用戶空間中實現新的傳輸層協議。

原始套接字通常在網路設備中可用,用於路由協議,例如Internet 組管理協議(IGMP) 和開放最短路徑優先(OSPF),以及用於Internet 控制消息協議(ICMP) 等事情,由ping 實用程序。

以上內容參考網路-套接字

H. socket介面是什麼意思

是指同一計算機不同功能層之間的通信規則稱為介面。
java介面作用:
1、利於代碼的規范。這樣做的目的一方面是為了給開發人員一個清晰的指示,告訴他們哪些業務需要實現;同時也能防止由於開發人員隨搜伏意命名而導致的命名不清晰和代碼混亂,影響開發效率。
2、有利於對代碼進行維護。可以一開始定義一個介面,把功能菜單放在介面里,然後定義類時實現這個介面,以後要換的話只不過是引用另一個類而已,這樣就達到維護、拓展的方便性。
3、保證代碼的安全和嚴密。一個好的程序一定符合高內聚低耦合的特徵,能夠讓系統世坦攜的功能較好地實現,而信手不涉及任何具體的實現細節。這樣就比較安全、嚴密一些,這一思想一般在軟體開發中較為常見。

閱讀全文

與socket網路相關的資料

熱點內容
蘋果描述過期文件 瀏覽:271
當日沖賬密碼 瀏覽:691
u盤文件被吃掉了怎麼恢復 瀏覽:440
電腦游標總是打開同一個文件 瀏覽:178
數據刪除怎麼表示 瀏覽:672
蘋果用什麼清理緩存文件 瀏覽:248
數據科學之路是什麼 瀏覽:857
哪個app貸款好 瀏覽:826
iphone支持橋接嗎 瀏覽:16
dnf85版本首飾熟練度還有用么 瀏覽:201
commonconfigcfg配置文件 瀏覽:973
如何將wps文件拉入蘋果手機裡面 瀏覽:456
高中學什麼編程 瀏覽:342
迷你編程如何切換角色 瀏覽:737
魔術工具怎樣做 瀏覽:972
IDEA文件夾哪個是安裝包 瀏覽:864
wav格式的文件 瀏覽:489
iphone4s支持的視頻解析度 瀏覽:123
wps圖表鏈接文件不可用 瀏覽:426
官方網購節什麼網站 瀏覽:635

友情鏈接