<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > TCP/IP通信程序設計方式

TCP/IP通信程序設計方式

——
作者: 時(shí)間:2007-08-10 來(lái)源:電子產(chǎn)品世界 收藏

  剛接觸/IP設計的人根據范例可以很快編出一個(gè)程序,據此一些人可能會(huì )認為/IP編程很簡(jiǎn)單。其實(shí)不然,/IP編程具有較為豐富的內容。其編程的豐富性主要體現在方式和報文格式的多樣性上。

一。通信方式

  主要有以下三大類(lèi):

  (一)SERVER/CLIENT方式

  1.一個(gè)Client方連接一個(gè)Server方,或稱(chēng)點(diǎn)對點(diǎn)(peer to peer)。
  2.多個(gè)Client方連接一個(gè)Server方,這也是通常的并發(fā)服務(wù)器方式。
  3.一個(gè)Client方連接多個(gè)Server方,這種方式很少見(jiàn),主要用于一個(gè)客戶(hù)向多個(gè)服務(wù)器發(fā)送請求情況。

  (二)連接方式

  1.長(cháng)連接

  Client方與Server方先建立通訊連接,連接建立后不斷開(kāi),然后再進(jìn)行報文發(fā)送和接收。這種方式下由于通訊連接一直存在,可以用下面命令查看連接是否建立:

  netstat –f inet|grep 端口號(如5678)。

  此種方式常用于點(diǎn)對點(diǎn)通訊。

  2.短連接

  Client方與Server每進(jìn)行一次報文收發(fā)交易時(shí)才進(jìn)行通訊連接,交易完畢后立即斷開(kāi)連接。此種方式常用于一點(diǎn)對多點(diǎn)通訊,比如多個(gè)Client連接一個(gè)Server.

  (三)發(fā)送接收方式

  1.異步

報文發(fā)送和接收是分開(kāi)的,相互獨立的,互不影響。這種方式又分兩種情況:

  (1)異步雙工:接收和發(fā)送在同一個(gè)程序中,有兩個(gè)不同的子進(jìn)程分別負責發(fā)送和接收
  (2)異步單工:接收和發(fā)送是用兩個(gè)不同的程序來(lái)完成。

  2.同步

  報文發(fā)送和接收是同步進(jìn)行,既報文發(fā)送后等待接收返回報文。同步方式一般需要考慮超時(shí)問(wèn)題,即報文發(fā)上去后不能無(wú)限等待,需要設定超時(shí)時(shí)間,超過(guò)該時(shí)間發(fā)送方不再等待讀返回報文,直接通知超時(shí)返回。

  實(shí)際通信方式是這三類(lèi)通信方式的組合。比如一般書(shū)上提供的TCP/IP范例程序大都是同步短連接的SERVER/CLIENT程序。有的組合是基本不用的,比較常用的有價(jià)值的組合是以下幾種:

        同步短連接Server/Client 
        同步長(cháng)連接Server/Client
        異步短連接Server/Client
        異步長(cháng)連接雙工Server/Client
        異步長(cháng)連接單工Server/Client

  其中異步長(cháng)連接雙工是最為復雜的一種通信方式,有時(shí)候經(jīng)常會(huì )出現在不同銀行或不同城市之間的兩套系統之間的通信。比如金卡工程。由于這幾種通信方式比較固定,所以可以預先編制這幾種通信方式的模板程序。


二.報文格式

  通信報文格式多樣性更多,相應地就必須設計對應的讀寫(xiě)報文的接收和發(fā)送報文函數。

  (一)阻塞與非阻塞方式 

  1.非阻塞方式

  讀函數不停地進(jìn)行讀動(dòng)作,如果沒(méi)有報文接收到,等待一段時(shí)間后超時(shí)返回,這種情況一般需要指定超時(shí)時(shí)間。

  2.阻塞方式

  如果沒(méi)有報文接收到,則讀函數一直處于等待狀態(tài),直到有報文到達。


  (二)循環(huán)讀寫(xiě)方式

  1.一次直接讀寫(xiě)報文

  在一次接收或發(fā)送報文動(dòng)作中一次性不加分別地全部讀取或全部發(fā)送報文字節。

  2.不指定長(cháng)度循環(huán)讀寫(xiě)

  這一般發(fā)生在短連接進(jìn)程中,受網(wǎng)絡(luò )路由等限制,一次較長(cháng)的報文可能在網(wǎng)絡(luò )傳輸過(guò)程中被分解成了好幾個(gè)包。一次讀取可能不能全部讀完一次報文,這就需要循環(huán)讀報文,直到讀完為止。

  3.帶長(cháng)度報文頭循環(huán)讀寫(xiě)

  這種情況一般是在長(cháng)連接進(jìn)程中,由于在長(cháng)連接中沒(méi)有條件能夠判斷循環(huán)讀寫(xiě)什么時(shí)候結束,所以必須要加長(cháng)度報文頭。讀函數先是讀取報文頭的長(cháng)度,再根據這個(gè)長(cháng)度去讀報文.實(shí)際情況中,報頭的碼制格式還經(jīng)常不一樣,如果是非ASCII碼的報文頭,還必須轉換成ASCII,常見(jiàn)的報文頭碼制有:
(1)n個(gè)字節的ASCII碼
(2)n個(gè)字節的BCD碼
(3)n個(gè)字節的網(wǎng)絡(luò )整型碼

  以上是幾種比較典型的讀寫(xiě)報文方式,可以與通信方式模板一起預先提供一些典型的API讀寫(xiě)函數。當然在實(shí)際問(wèn)題中,可能還必須編寫(xiě)與對方報文格式配套的讀寫(xiě)API.

  在實(shí)際情況中,往往需要把我們自己的系統與別人的系統進(jìn)行連接,有了以上模板與API,可以說(shuō)連接任何方式的通信程序都不存在問(wèn)題。

tcp/ip相關(guān)文章:tcp/ip是什么


數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理




關(guān)鍵詞: 程序設計 TCP 通信 通信基礎

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>