亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一類多線程綜合通信管理器的設(shè)計(jì)和實(shí)現(xiàn)

        2019-05-24 14:21:16陳容華李方方
        無線互聯(lián)科技 2019年2期
        關(guān)鍵詞:多線程串口通信網(wǎng)絡(luò)通信

        陳容華 李方方

        摘 要:文章提出了在計(jì)算機(jī)系統(tǒng)工程中廣泛應(yīng)用的集網(wǎng)絡(luò)通信與RS232串口通信等綜合信道通信管理器的功能需求,敘述了該通信管理器既可以作為通信服務(wù)器,又可以作為局域網(wǎng)前端通信控制器的具體工作模式,給出了該通信管理器的設(shè)計(jì)思路和具體實(shí)現(xiàn)方法,并描述了個(gè)部分的執(zhí)行流程。

        關(guān)鍵詞:多線程;網(wǎng)絡(luò)通信;串口通信;.Net;C#

        隨著互聯(lián)網(wǎng)與物聯(lián)網(wǎng)技術(shù)的應(yīng)用,各種與之相應(yīng)的新技術(shù)和新應(yīng)用層出不窮。但歸根到底,所有的應(yīng)用都是基于對(duì)相關(guān)設(shè)備的運(yùn)行和狀態(tài)信息進(jìn)行采集、存儲(chǔ)及在網(wǎng)絡(luò)上進(jìn)行傳輸。在當(dāng)前的實(shí)際工程項(xiàng)目中,需要有這樣一類通信前置服務(wù)器,即可以與后臺(tái)客戶端進(jìn)行通信,充當(dāng)前端通信服務(wù)器,接收并處理來自這些客戶端的各類請(qǐng)求。另一方面,這種通信服務(wù)器又需要作為客戶端,與作為服務(wù)器端的現(xiàn)場(chǎng)設(shè)備進(jìn)行相連,這類通信管理器廣泛應(yīng)用于工業(yè)現(xiàn)場(chǎng)的數(shù)據(jù)采集和信息傳輸系統(tǒng)中。目前工程上開發(fā)的這類通信管理器都與具體的項(xiàng)目直接關(guān)聯(lián),也就是與具體系統(tǒng)的數(shù)據(jù)傳輸規(guī)約直接關(guān)聯(lián),這一類系統(tǒng)應(yīng)用較好的通信控制器往往不能方便地移植到其他系統(tǒng),嚴(yán)重制約了其推廣應(yīng)用[1]。本文敘述設(shè)計(jì)和實(shí)現(xiàn)一種通用型的通信管理器的思路和方法,這種通信管理器將具體的數(shù)據(jù)通信規(guī)約與通信服務(wù)進(jìn)行徹底分離,確保開發(fā)出的通信管理器更加具有通用性。涉及實(shí)現(xiàn)的通信服務(wù)器可接入不同類型的客戶端,盡管這些客戶端采用不同的通信技術(shù),本通信服務(wù)器都能夠?yàn)檫@些不同類型的客戶端提供數(shù)據(jù)服務(wù)。

        該通信管理器系統(tǒng)基于TCP/IP通信協(xié)議,使用較為成熟的開發(fā)平臺(tái)Visual studio IDE。圍繞提供了多種屬性和操作函數(shù)的Microsoft WinSocket控件及串口空間來編寫代碼,同時(shí)考慮系統(tǒng)通信的實(shí)時(shí)性,運(yùn)用了多線程技術(shù)。

        1 功能需求

        前置通信服務(wù)器功能要求如下:(1)接收來自經(jīng)授權(quán)的客戶端的連接請(qǐng)求,與客戶端建立TCP連接。(2)接收來自客戶端的數(shù)據(jù)報(bào)文,存儲(chǔ)、顯示并實(shí)時(shí)處理這些報(bào)文。(3)將這些報(bào)文通過各類接口(串口或Can總線等)轉(zhuǎn)發(fā)給有關(guān)現(xiàn)場(chǎng)設(shè)備。(4)接收現(xiàn)場(chǎng)運(yùn)行的有關(guān)設(shè)備的上傳的各類報(bào)文信息,并將此報(bào)文信息進(jìn)行存儲(chǔ)處理,同時(shí)回傳給客戶端[2]。

        2 設(shè)計(jì)與實(shí)現(xiàn)

        2.1 RS232通信實(shí)現(xiàn)

        通信管理器的RS232通信部分使用了C#提供的SerialPort控件來實(shí)現(xiàn)對(duì)串口通信過程進(jìn)行控制。該控件的命名空間為System.IO.Ports。

        實(shí)際編程實(shí)現(xiàn)時(shí),除需要設(shè)置這些屬性參數(shù)外,還需要調(diào)用SerialPort控件的常用函數(shù)。

        SerialPort控件的常用事件為DataReceived,用該函數(shù)直接處理SerialPort 對(duì)象的數(shù)據(jù)接收事件。

        系統(tǒng)啟動(dòng)后,將首先初始化串口,設(shè)置串口號(hào)(支持多個(gè)串口同時(shí)通信)、通信波特率、數(shù)據(jù)位、校驗(yàn)位、停止位。然后調(diào)用open函數(shù)打開串口。當(dāng)串口SerialPort控件偵聽到有數(shù)據(jù)時(shí),觸發(fā)DataReceived事件,啟動(dòng)數(shù)據(jù)接收函數(shù),將緩沖區(qū)的數(shù)據(jù)字節(jié)都入到一個(gè)數(shù)組中,然后通過該其他通信方式轉(zhuǎn)發(fā)到后臺(tái)客戶機(jī)中,并將這些通信報(bào)文存儲(chǔ)在本地日志文件中。

        2.2 Socket控件類

        本系統(tǒng)的網(wǎng)絡(luò)通信基于TCP/IP協(xié)議,一般此類協(xié)議實(shí)現(xiàn)的基本流程為:首先在服務(wù)器端新建一個(gè)通信套接字,服務(wù)器處于等待監(jiān)聽狀態(tài),但服務(wù)器端serverSocket并不定位具體的客戶端socket,而是實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)的狀態(tài)。當(dāng)客戶端的某個(gè)連接套接字clientSocket向服務(wù)器發(fā)送連接請(qǐng)求(其目標(biāo)是服務(wù)器的serverSocket)時(shí),clientSocket必須知道serverSocket的地址和端口號(hào),發(fā)出連接請(qǐng)求。當(dāng)服務(wù)器socket監(jiān)聽到或者是收到客戶端socket的連接請(qǐng)求時(shí),服務(wù)器就立即響應(yīng)客戶端的請(qǐng)求(有時(shí)可根據(jù)安全需要,拒絕客戶端的連接請(qǐng)求),建立一個(gè)新的Socket,把服務(wù)器Socket發(fā)送給客戶端,一旦客戶端確認(rèn)連接,則連接建立。上述流程的實(shí)現(xiàn)都通過事件觸發(fā)產(chǎn)生。

        由于前置通信服務(wù)器既需要為后臺(tái)客戶端提供接入服務(wù),同時(shí)需要請(qǐng)求連接現(xiàn)場(chǎng)的監(jiān)控設(shè)備,因此,本系統(tǒng)同時(shí)具備服務(wù)器和客戶機(jī)雙重通信功能,無疑增加了系統(tǒng)的復(fù)雜性。因此,本系統(tǒng)設(shè)計(jì)主要思想為:利用C#控件為服務(wù)器端實(shí)現(xiàn)與后臺(tái)客戶機(jī)進(jìn)行通信,而通過創(chuàng)建若干個(gè)Socket對(duì)象來與現(xiàn)場(chǎng)監(jiān)控設(shè)備(作為服務(wù)端,處在偵聽狀態(tài),IP地址與端口號(hào)已知)進(jìn)行連接。

        為此,在通信服務(wù)器上,設(shè)置一個(gè)定時(shí)器,如50 ms,定時(shí)監(jiān)測(cè)現(xiàn)場(chǎng)設(shè)備是否上線,當(dāng)現(xiàn)場(chǎng)設(shè)備上線后,由于這些設(shè)備IP地址是固定的,通信服務(wù)器將循環(huán)掃描每個(gè)設(shè)備的上線狀態(tài),并對(duì)未連接成功的遠(yuǎn)端發(fā)起連接,如果檢測(cè)到連接成功狀態(tài),將這些套接字放入一個(gè)Socket隊(duì)列中[3]。

        程序執(zhí)行中,當(dāng)某一Socket有數(shù)據(jù)輸入時(shí),啟動(dòng)觸發(fā)事件,在DataArrival函數(shù)中讀入網(wǎng)絡(luò)中遠(yuǎn)端的數(shù)據(jù),放入某一隊(duì)列,由其他進(jìn)程進(jìn)行處理。

        2.3 Tcplistener類與多線程

        通信服務(wù)器需要對(duì)后臺(tái)管理機(jī)進(jìn)行通信,此時(shí),又要將它設(shè)置成服務(wù)模式,為此,需采用多線程技術(shù)。正好在C#中,針對(duì)網(wǎng)絡(luò)通信,提供了一個(gè)專門的類Tcplistener,這個(gè)類是對(duì)Socket Tcp協(xié)議封裝的接口,更便于用戶的開發(fā)。利用Tcplistenner類的各類函數(shù),編程要點(diǎn)描述如下。

        (1)建立Tcp監(jiān)聽器TcpListener對(duì)象。

        TcpListener serverListenner = new TcpListener (IPAddress.Any, IPAddr,Port);

        其中IPAddress.Any是固定參數(shù),IPAddr為本服務(wù)器的IP地址,Port為端口號(hào)。

        (2)調(diào)用serverListenner對(duì)象的Start函數(shù)啟動(dòng)偵聽。此時(shí),新建一個(gè)新的線程tNetClient,定義為客戶端連接線程,并且啟動(dòng)該線程。具體代碼如下。

        listener.Start();

        tNetClient = new Thread(AcceptClient);

        tNetClient.IsBackground = true;

        tNetClient.Start();

        (3)當(dāng)有客戶端連接進(jìn)來,執(zhí)行客戶端連接線程,具體代碼如下。

        private void AcceptClient(){

        while (true)

        {

        TcpClient thisClient = listener.AcceptTcpClient();

        winSocketClients.Add(thisClient);

        }

        }

        (4)通過Socket的Receive方法獲取客戶端發(fā)送的數(shù)據(jù)

        byte [] resData = new byte[2048];

        int kLen = s.Receive(resData);

        (5)通過Socket的Send方法向客戶端發(fā)送數(shù)據(jù)

        byte[] sendData=System.Text.Encoding.Default.GetBytes(“text”);

        mySocket .Send(sendData);

        程序?qū)⒍〞r(shí)掃描各個(gè)連接套接字,如有遠(yuǎn)程端點(diǎn)發(fā)過來的數(shù)據(jù),則啟動(dòng)接受程序,讀入數(shù)據(jù),并存入緩存中,待其他線程處理。

        3 結(jié)語

        本文針對(duì)既需要為多個(gè)后臺(tái)工作站提供通信服務(wù),又要同時(shí)接入多個(gè)遠(yuǎn)程服務(wù)器的需求,設(shè)計(jì)出符合功能需求的綜合通信管理器,系統(tǒng)設(shè)計(jì)運(yùn)用了各類控件技術(shù)和多線程編程技術(shù)。并用C#編程語言,實(shí)現(xiàn)了最終的系統(tǒng)。經(jīng)實(shí)際運(yùn)行測(cè)試,系統(tǒng)穩(wěn)定可靠。

        [參考文獻(xiàn)]

        [1]詹姆斯·庫(kù)羅斯.計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法[M].7版.北京:機(jī)械工業(yè)出版社,2018.

        [2]尹圣雨.TCP/IP網(wǎng)絡(luò)編程[M].北京:人民郵電出版社,2014.

        [3]邢彥辰.數(shù)據(jù)通信與計(jì)算機(jī)網(wǎng)絡(luò)[M].北京:人民郵電出版社,2011.

        [4]Chenjx2014.RS-232通信程序設(shè)計(jì)[EB/OL].(2017-03-09)[2018-12-24].https://blog.csdn.net/haitaolang/article/details/60956456.

        猜你喜歡
        多線程串口通信網(wǎng)絡(luò)通信
        海上軍用網(wǎng)絡(luò)通信的安全控制技術(shù)
        基于網(wǎng)絡(luò)通信的智能照明系統(tǒng)設(shè)計(jì)
        電子制作(2019年15期)2019-08-27 01:11:48
        網(wǎng)絡(luò)通信中信息隱藏技術(shù)的應(yīng)用
        談?dòng)?jì)算機(jī)網(wǎng)絡(luò)通信常見問題及技術(shù)發(fā)展
        電子制作(2017年17期)2017-12-18 06:41:06
        基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計(jì)
        Java并發(fā)工具包對(duì)并發(fā)編程的優(yōu)化
        串口通信在智能家居監(jiān)控系統(tǒng)中的應(yīng)用
        基于多線程文件傳輸關(guān)鍵技術(shù)研究與實(shí)現(xiàn)
        網(wǎng)頁(yè)爬蟲技術(shù)的關(guān)鍵技術(shù)研究探索
        一種基于多線程的高速磁盤鏡像算法
        成人大片免费观看视频| 精品无码久久久久久久久粉色| 日本香蕉久久一区二区视频| 久久一二三四区中文字幕| 一区二区三区精品免费| 欧美精品欧美人与动人物牲交| 一区二区三区人妻无码| 亚洲日韩欧美国产高清αv| 亚洲精品天堂在线观看| 国产精品伦理久久一区| 中国孕妇变态孕交xxxx| 国产成人精品123区免费视频| 亚洲AV秘 无码一区二p区三区| 中文字幕五月久久婷热| 加勒比久久综合久久伊人爱| 天天做天天摸天天爽天天爱| 欧美猛男军警gay自慰| 日本视频一区二区三区免费观看 | 亚洲av午夜成人片精品| 日本一区二区在线播放| 我和丰满妇女激情视频| 国偷自产视频一区二区久| 久久99精品久久久久久野外 | 久久天天躁狠狠躁夜夜2020一| 亚洲狠狠婷婷综合久久| 北岛玲精品一区二区三区| 亚洲国产av综合一区| 亚洲成av人片乱码色午夜| 明星性猛交ⅹxxx乱大交| 久久精品亚洲精品毛片| 99亚洲女人私处高清视频| 亚洲av综合av一区二区三区| 欧美精品videossex少妇| 亚洲成av人在线观看无堂无码| 国产少妇一区二区三区| 黄片视频免费在线播放观看| 最新亚洲人成网站在线观看| 99国产精品久久久蜜芽| av手机天堂在线观看| 国产丝袜美腿精品91在线看| 伊人久久大香线蕉综合网站|