轉載:http://peixun.eol.cn/company/company_article_detail.php?articleid=15033
對于初學者,或者沒有接觸過網路編程的程式員,會覺得網路編程涉及的知識很高深,很難,其實這是一種誤解,當你的語法熟悉以后,其實基本的網路編程現在已經被實作的例外簡單了。
網路編程是什么?
網路編程的本質是兩個設備之間的資料交換,當然,在計算機網路中,設備主要指計算機。資料傳遞本身沒有多大的難度,不就是把一個設備中的資料發送給兩外一個設備,然后接受另外一個設備反饋的資料。
現在的網路編程基本上都是基于請求/回應方式的,也就是一個設備發送請求資料給另外一個,然后接收另一個設備的反饋。
在網路編程中,發起連接程式,也就是發送第一次請求的程式,被稱作客戶端(Client),等待其他程式連接的程式被稱作服務器(Server)。客戶端程式可以在需要的時候啟動,而服務器為了能夠時刻相應連接,則需要一直啟動。例如以打電話為例,首先撥號的人類似于客戶端,接聽電話的人必須保持電話暢通類似于服務器。
連接一旦建立以后,就客戶端和服務器端就可以進行資料傳遞了,而且兩者的身份是等價的。
在一些程式中,程式既有客戶端功能也有服務器端功能,最常見的軟體就是BT、emule這類軟體了。
下面來談一下如何建立連接以及如何發送資料。
IP地址和域名
在現實生活中,如果要打電話則需要知道對應人的電話號碼,如果要寄信則需要知道收信人的地址。在網路中也是這樣,需要知道一個設備的位置,則需要使用該設備的IP地址,具體的連接程序由硬體實作,程式員不需要過多的關心。
IP地址是一個規定,現在使用的是IPv4,既由4個0-255之間的數字組成,在計算機內部存盤時只需要4個位元組即可。在計算機中,IP地址是分配給網卡的,每個網卡有一個唯一的IP地址,如果一個計算機有多個網卡,則該臺計算機則擁有多個不同的IP地址,在同一個網路內部,IP地址不能相同。IP地址的概念類似于電話號碼、身份證這樣的概念。
由于IP地址不方便記憶,所以有專門創造了域名(Domain Name)的概念,其實就是給IP取一個字符的名字,例如163.com、sina.com等。IP和域名之間存在一定的對應關系。如果把IP地址類比成身份證號的話,那么域名就是你的姓名。
其實在網路中只能使用IP地址進行資料傳輸,所以在傳輸以前,需要把域名轉換為IP,這個由稱作DNS的服務器專門來完成。
所以在網路編程中,可以使用IP或域名來標識網路上的一臺設備。
埠的概念
為了在一臺設備上可以運行多個程式,人為的設計了埠(Port)的概念,類似的例子是公司內部的分機號碼。
規定一個設備有216個,也就是65536個埠,每個埠對應一個唯一的程式。每個網路程式,無論是客戶端還是服務器端,都對應一個或多個特定的埠號。由于0-1024之間多被作業系統占用,所以實際編程時一般采用1024以后的埠號。
使用埠號,可以找到一臺設備上唯一的一個程式。
所以如果需要和某臺計算機建立連接的話,只需要知道IP地址或域名即可,但是如果想和該臺計算機上的某個程式交換資料的話,還必須知道該程式使用的埠號。
資料傳輸方式
知道了如何建立連接,下面就是如何傳輸資料了,先來看一下資料傳輸的方式。
在網路上,不管是有線傳輸還是無線傳輸,資料傳輸的方式有兩種:
<!--[if !supportLists]-->l <!--[endif]-->TCP(Transfer Control Protocol)
傳輸控制協議方式,該傳輸方式是一種穩定可靠的傳送方式,類似于顯示中的打電話。只需要建立一次連接,就可以多次傳輸資料。就像電話只需要撥一次號,就可以實作一直通話一樣,如果你說的話不清楚,對方會要求你重復,保證傳輸的資料可靠。
使用該種方式的優點是穩定可靠,缺點是建立連接和維持連接的代價高,傳輸速度不快。
<!--[if !supportLists]-->l <!--[endif]-->UDP(User Datagram Protocol)
用戶資料報協議方式,該傳輸方式不建立穩定的連接,類似于發短資訊。每次發送資料都直接發送。發送多條短信,就需要多次輸入對方的號碼。該傳輸方式不可靠,資料有可能收不到,系統只保證盡力發送。
使用該種方式的優點是開銷小,傳輸速度快,缺點是資料有可能會丟失。
在實際的網路編程中,大家可以根據需要選擇任何一種傳輸方式,或組合使用這兩種方式實作資料的傳遞。
協議的概念
協議(Protocol)是網路編程中一個非常重要的概念,指的是傳輸資料的格式。因為大家在網路中需要傳輸各種各樣的資訊,在程式中獲得到的都是一組數值,如何閱讀這些數值呢,就需要提前規定好這組資料的格式,在客戶端按照該格式生成發送資料,服務器端按照該格式閱讀該資料,然后在按照一定的格式生成資料反饋給客戶端,客戶端再按照該格式閱讀資料。現實中類似的例子就是電報編碼,每個數字都是用特定的資料表達。
一般程式的協議都分成客戶端發送的資料格式,以及服務器端反饋的資料格式,客戶端和服務器端都遵循該格式生成或處理資料,實作兩者之間的復雜資料交換。
小結
網路編程就是使用IP地址,或域名,和埠連接到另一臺計算機上對應的程式,按照規定的協議(資料格式)來交換資料,實際編程中建立連接和發送、接收資料在語言級已經實作,做的更多的作業是設計協議,以及撰寫生成和決議資料的代碼罷了,然后把資料轉換成邏輯的結構顯示或控制邏輯即可。
對于初學者,或者沒有接觸過網路編程的程式員,會覺得網路編程涉及的知識很高深,很難,其實這是一種誤解,當你的語法熟悉以后,其實基本的網路編程現在已經被實作的例外簡單了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/67115.html
標籤:網絡通信
上一篇:虛擬機網卡不活躍如何解決
