【轉載】通訊長連線與短連線
關鍵字: tcp ip
什麼是長連線,什麼是短連線?
貼個經典的,看完了就應該沒啥問題了 :
TCP/IP通訊程式設計的豐富多樣性
剛接觸TCP/IP通訊設計的人根據範例可以很快編出一個通訊程
序,據此一些人可能會認為TCP/IP程式設計很簡單。其實不然,
TCP/IP程式設計具有較為豐富的內容。其程式設計的豐富性主要體現在
通訊方式和報文格式的多樣性上。
一。通訊方式
主要有以下三大類:
(一)SERVER/CLIENT方式
1.一個Client方連線一個Server方,或稱點對點(peer to peer):
2.多個Client方連線一個Server方,這也是通常的併發伺服器方式。
3.一個Client方連線多個Server方,這種方式很少見,主要
用於一個客戶向多個伺服器傳送請求情況。
(二)連線方式
1.長連線
Client方與Server方先建立通訊連線,連線建立後不斷開,
然後再進行報文傳送和接收。這種方式下由於通訊連線一直
存在,可以用下面命令檢視連線是否建立:
netstat –f inet|grep 埠號(如5678)。
此種方式常用於點對點通訊。
2.短連線
Client方與Server每進行一次報文收發交易時才進行通訊連
接,交易完畢後立即斷開連線。此種方式常用於一點對多點
通訊,比如多個Client連線一個Server.
(三)傳送接收方式
1.非同步
報文傳送和接收是分開的,相互獨立的,互不影響。這種方
式又分兩種情況:
(1)非同步雙工:接收和傳送在同一個程式中,有兩個不同的
子程式分別負責傳送和接收
(2)非同步單工:接收和傳送是用兩個不同的程式來完成。
2.同步
報文傳送和接收是同步進行,既報文傳送後等待接收返回報文。
同步方式一般需要考慮超時問題,即報文發上去後不能無限等
待,需要設定超時時間,超過該時間傳送方不再等待讀返回報
文,直接通知超時返回。
實際通訊方式是這三類通訊方式的組合。比如一般書上提供的
TCP/IP範例程式大都是同步短連線的SERVER/CLIENT程式。有的
組合是基本不用的,比較常用的有價值的組合是以下幾種:
同步短連線Server/Client
同步長連線Server/Client
非同步短連線Server/Client
非同步長連線雙工Server/Client
非同步長連線單工Server/Client
其中非同步長連線雙工是最為複雜的一種通訊方式,有時候經
常會出現在不同銀行或不同城市之間的兩套系統之間的通訊。
比如金卡工程。由於這幾種通訊方式比較固定,所以可以預
先編制這幾種通訊方式的模板程式。
二.報文格式
通訊報文格式多樣性更多,相應地就必須設計對應的讀寫報文的接
收和傳送報文函式。
(一)阻塞與非阻塞方式
1.非阻塞方式
讀函式不停地進行讀動作,如果沒有報文接收到,等待一段時間後
超時返回,這種情況一般需要指定超時時間。
2.阻塞方式
如果沒有報文接收到,則讀函式一直處於等待狀態,直到有報文到達。
(二)迴圈讀寫方式
1.一次直接讀寫報文
在一次接收或傳送報文動作中一次性不加分別地全部讀取或全部
傳送報文位元組。
2.不指定長度迴圈讀寫
這一般發生在短連線程式中,受網路路由等限制,一次較長的報
文可能在網路傳輸過程中被分解成了好幾個包。一次讀取可能不
能全部讀完一次報文,這就需要迴圈讀報文,直到讀完為止。
3.帶長度報文頭迴圈讀寫
這種情況一般是在長連線程式中,由於在長連線中沒有條件能夠
判斷迴圈讀寫什麼時候結束,所以必須要加長度報文頭。讀函式
先是讀取報文頭的長度,再根據這個長度去讀報文.實際情況中,
報頭的碼制格式還經常不一樣,如果是非ASCII碼的報文頭,還必須
轉換成ASCII,常見的報文頭碼制有:
(1)n個位元組的ASCII碼
(2)n個位元組的BCD碼
(3)n個位元組的網路整型碼
以上是幾種比較典型的讀寫報文方式,可以與通訊方式模板一起
預先提供一些典型的API讀寫函式。當然在實際問題中,可能還
必須編寫與對方報文格式配套的讀寫API.
在實際情況中,往往需要把我們自己的系統與別人的系統進行連線,
有了以上模板與API,可以說連線任何方式的通訊程式都不存在問題。
貼個經典的,看完了就應該沒啥問題了 :
TCP/IP通訊程式設計的豐富多樣性
剛接觸TCP/IP通訊設計的人根據範例可以很快編出一個通訊程
序,據此一些人可能會認為TCP/IP程式設計很簡單。其實不然,
TCP/IP程式設計具有較為豐富的內容。其程式設計的豐富性主要體現在
通訊方式和報文格式的多樣性上。
一。通訊方式
主要有以下三大類:
(一)SERVER/CLIENT方式
1.一個Client方連線一個Server方,或稱點對點(peer to peer):
2.多個Client方連線一個Server方,這也是通常的併發伺服器方式。
3.一個Client方連線多個Server方,這種方式很少見,主要
用於一個客戶向多個伺服器傳送請求情況。
(二)連線方式
1.長連線
Client方與Server方先建立通訊連線,連線建立後不斷開,
然後再進行報文傳送和接收。這種方式下由於通訊連線一直
存在,可以用下面命令檢視連線是否建立:
netstat –f inet|grep 埠號(如5678)。
此種方式常用於點對點通訊。
2.短連線
Client方與Server每進行一次報文收發交易時才進行通訊連
接,交易完畢後立即斷開連線。此種方式常用於一點對多點
通訊,比如多個Client連線一個Server.
(三)傳送接收方式
1.非同步
報文傳送和接收是分開的,相互獨立的,互不影響。這種方
式又分兩種情況:
(1)非同步雙工:接收和傳送在同一個程式中,有兩個不同的
子程式分別負責傳送和接收
(2)非同步單工:接收和傳送是用兩個不同的程式來完成。
2.同步
報文傳送和接收是同步進行,既報文傳送後等待接收返回報文。
同步方式一般需要考慮超時問題,即報文發上去後不能無限等
待,需要設定超時時間,超過該時間傳送方不再等待讀返回報
文,直接通知超時返回。
實際通訊方式是這三類通訊方式的組合。比如一般書上提供的
TCP/IP範例程式大都是同步短連線的SERVER/CLIENT程式。有的
組合是基本不用的,比較常用的有價值的組合是以下幾種:
同步短連線Server/Client
同步長連線Server/Client
非同步短連線Server/Client
非同步長連線雙工Server/Client
非同步長連線單工Server/Client
其中非同步長連線雙工是最為複雜的一種通訊方式,有時候經
常會出現在不同銀行或不同城市之間的兩套系統之間的通訊。
比如金卡工程。由於這幾種通訊方式比較固定,所以可以預
先編制這幾種通訊方式的模板程式。
二.報文格式
通訊報文格式多樣性更多,相應地就必須設計對應的讀寫報文的接
收和傳送報文函式。
(一)阻塞與非阻塞方式
1.非阻塞方式
讀函式不停地進行讀動作,如果沒有報文接收到,等待一段時間後
超時返回,這種情況一般需要指定超時時間。
2.阻塞方式
如果沒有報文接收到,則讀函式一直處於等待狀態,直到有報文到達。
(二)迴圈讀寫方式
1.一次直接讀寫報文
在一次接收或傳送報文動作中一次性不加分別地全部讀取或全部
傳送報文位元組。
2.不指定長度迴圈讀寫
這一般發生在短連線程式中,受網路路由等限制,一次較長的報
文可能在網路傳輸過程中被分解成了好幾個包。一次讀取可能不
能全部讀完一次報文,這就需要迴圈讀報文,直到讀完為止。
3.帶長度報文頭迴圈讀寫
這種情況一般是在長連線程式中,由於在長連線中沒有條件能夠
判斷迴圈讀寫什麼時候結束,所以必須要加長度報文頭。讀函式
先是讀取報文頭的長度,再根據這個長度去讀報文.實際情況中,
報頭的碼制格式還經常不一樣,如果是非ASCII碼的報文頭,還必須
轉換成ASCII,常見的報文頭碼制有:
(1)n個位元組的ASCII碼
(2)n個位元組的BCD碼
(3)n個位元組的網路整型碼
以上是幾種比較典型的讀寫報文方式,可以與通訊方式模板一起
預先提供一些典型的API讀寫函式。當然在實際問題中,可能還
必須編寫與對方報文格式配套的讀寫API.
在實際情況中,往往需要把我們自己的系統與別人的系統進行連線,
有了以上模板與API,可以說連線任何方式的通訊程式都不存在問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7389553/viewspace-619662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 長連線與短連線
- 長連線和短連線
- 長連線和短連線的使用
- http的長連線和短連線HTTP
- JAVA之長連線、短連線和心跳包Java
- HTTP長連線和短連線原理淺析HTTP
- 12、Swoole 中 TCP、UDP 和長連線、短連線TCPUDP
- HTTP長連線、短連線究竟是什麼?HTTP
- http長短連線和長短輪詢HTTP
- Socket程式設計-長連線與短連線,心跳(keep-alive)程式設計Keep-Alive
- HTTP協議中的短輪詢、長輪詢、長連線和短連線HTTP協議
- 輪詢、長輪詢、短連線、長連線區別對比
- 轉載:內連線與外連線的區別
- Mysql關於長連線短連線優劣比較MySql
- 菜鳥學網路之 —— 長連線和短連線
- 一文讀透HTTP的長連線和短連線HTTP
- 談談HTTP協議中的短輪詢、長輪詢、長連線和短連線HTTP協議
- 轉載: erlang連線mysqlMySql
- 【轉載】java連線MYSQLJavaMySql
- pythonsocket程式設計之三:長連線、短連線以及心跳(轉藥師Aric的文章)Python程式設計
- Oracle(+)連線與Join連線Oracle
- 左連線與右連線
- Http 和TCP的關係,TCP長連線和短連線有什麼區別?HTTPTCP
- PDO 長連線
- HTTP長連線HTTP
- ORACLE 半連線與反連線Oracle
- 外連線與連線順序
- Modbus轉Profinet閘道器連線LED大屏與PLC通訊
- Http持久連線與HttpClient連線池HTTPclient
- php與myslq的連線(轉)PHP
- 連結檔案 (硬連線 與 符號連線)符號
- http Socket長連線HTTP
- php使用長連線PHP
- nginx 長連線配置Nginx
- C語言連線Oracle (轉載)C語言Oracle
- 內連線、左連線、右連線
- 關於面向連線與面向無連線
- linux 的軟連線與硬連線Linux