根據(jù)VC的執(zhí)行機(jī)構(gòu)以太網(wǎng)控制系統(tǒng)的設(shè)計(jì)策略
系統(tǒng)采用Client/Server模式。通過(guò)以太網(wǎng)轉(zhuǎn)串口模塊的配置軟件,將該模塊設(shè)置成服務(wù)器模式,而主控計(jì)算機(jī)上的控制軟件部分為客戶端,每次啟動(dòng)由主控計(jì)算機(jī)主動(dòng)連接執(zhí)行機(jī)構(gòu)。客戶端和服務(wù)器采用面向連接的通信協(xié)議:控制計(jì)算機(jī)和模塊之間會(huì)建立一個(gè)虛擬連接,這個(gè)連接一旦建立,客戶端和服務(wù)器之間就可以把數(shù)據(jù)當(dāng)作一個(gè)雙向字節(jié)流進(jìn)行交換;如果連接建立不成功,則不會(huì)發(fā)送數(shù)據(jù)。另外,面向連接傳輸?shù)拿恳粋€(gè)報(bào)文都需要接收端確認(rèn),未確認(rèn)報(bào)文被認(rèn)為是出錯(cuò)的報(bào)文。
3.1 通信過(guò)程
Socket有同步阻塞方式和異步非阻塞方式兩種使用,本系統(tǒng)應(yīng)用程序中創(chuàng)建了繼承于CAsyncSocket類的TestSocket類,它是一個(gè)異步非阻塞Socket封裝類。
由于已經(jīng)將以太網(wǎng)轉(zhuǎn)串口模塊設(shè)置為服務(wù)器模式,所以,主控計(jì)算機(jī)段的程序是作為客戶端出現(xiàn)的,該程序的編寫大致按照以下步驟進(jìn)行:
1) 首先調(diào)用WSAStartup函數(shù)來(lái)初始化套接字庫(kù)。
2) 調(diào)用socket函數(shù)來(lái)創(chuàng)建一個(gè)套接字。
3) 調(diào)用connect函數(shù)連接服務(wù)器,發(fā)出連接請(qǐng)求
4) 服務(wù)器響應(yīng)連接請(qǐng)求后,與服務(wù)器開(kāi)始進(jìn)行交互操作(接收、發(fā)送數(shù)據(jù)等),直到請(qǐng)求結(jié)束。
5) 調(diào)用closesocket關(guān)閉套接字,釋放套接字資源。
6) 調(diào)用WSACleanup函數(shù)釋放相應(yīng)資源。
客戶端程序與服務(wù)器的通信過(guò)程如圖3所示:
圖3:面向連接服務(wù)的socket調(diào)用模型
在以太網(wǎng)轉(zhuǎn)串口模塊中,服務(wù)器程序調(diào)用listen函數(shù)將此socket置于監(jiān)聽(tīng)狀態(tài),讓這個(gè)socket對(duì)進(jìn)來(lái)的連接進(jìn)行監(jiān)聽(tīng)并確認(rèn)連接請(qǐng)求。當(dāng)服務(wù)器端監(jiān)聽(tīng)到來(lái)自客戶端的連接請(qǐng)求后,一個(gè)正在監(jiān)聽(tīng)的socket將給將給每個(gè)請(qǐng)求發(fā)送一個(gè)確認(rèn)信息,然后調(diào)用accept函數(shù),接著,面向連接的客戶通過(guò)調(diào)用connect函數(shù)啟動(dòng)網(wǎng)絡(luò)對(duì)話。在客戶端和服務(wù)器端建立連接以后,雙方就可以通過(guò)send和recv或其它面向連接的Socket API函數(shù)進(jìn)行網(wǎng)絡(luò)通信了。
評(píng)論