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

        ?

        基于HTTP協(xié)議的數(shù)據(jù)傳輸程序設(shè)計(jì)與實(shí)例

        2022-01-20 01:39:24于文學(xué)畢聰瑞陳紹飛
        工程與試驗(yàn) 2021年4期
        關(guān)鍵詞:服務(wù)端程序設(shè)計(jì)客戶端

        于文學(xué),張 鵬,畢聰瑞,陳紹飛

        (中機(jī)試驗(yàn)裝備股份有限公司,吉林 長(zhǎng)春 130103)

        1 引 言

        自動(dòng)校直機(jī)現(xiàn)已成為工廠中不可或缺的智能裝備,代替人工操作液壓機(jī)等設(shè)備完成校直工序,降低人工勞動(dòng)成本及時(shí)間成本,實(shí)現(xiàn)自動(dòng)校正,使產(chǎn)品能夠滿足使用要求,極大地提高產(chǎn)品的利用率。隨著“數(shù)字化工廠”概念的誕生,工廠中的加工產(chǎn)品各工藝數(shù)據(jù)追溯顯得尤為重要,自動(dòng)校直機(jī)同樣面臨著校正數(shù)據(jù)及設(shè)備運(yùn)行狀態(tài)實(shí)時(shí)傳輸?shù)膯栴}。

        目前,工廠MES系統(tǒng)數(shù)據(jù)采集方式可分為以下三類:直接聯(lián)網(wǎng)通信進(jìn)行數(shù)據(jù)交互、通過工業(yè)網(wǎng)關(guān)通信進(jìn)行數(shù)據(jù)交互、遠(yuǎn)程IO模塊進(jìn)行數(shù)據(jù)交互。直接聯(lián)網(wǎng)通信適用于生產(chǎn)設(shè)備具備以太網(wǎng)通信網(wǎng)口,直接與局域網(wǎng)連接進(jìn)行數(shù)據(jù)傳輸。工業(yè)網(wǎng)關(guān)通信適用于生產(chǎn)設(shè)備不具備以太網(wǎng)通信網(wǎng)口硬件條件,通過PLC模塊進(jìn)行數(shù)據(jù)采集。當(dāng)生產(chǎn)設(shè)備既不具備以太網(wǎng)通信網(wǎng)口,也沒有使用PLC模塊,可增加遠(yuǎn)程IO模塊進(jìn)行數(shù)據(jù)采集。

        基于HTTP協(xié)議進(jìn)行數(shù)據(jù)傳輸屬于直接聯(lián)網(wǎng)通信的一種主流方式。HTTP協(xié)議具有簡(jiǎn)單快速、靈活、可擴(kuò)展性強(qiáng)的特點(diǎn),適用于工廠內(nèi)MES數(shù)據(jù)交互的應(yīng)用場(chǎng)景。因此,本文介紹了一種基于HTTP協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)姆椒?,與自動(dòng)校直機(jī)上位機(jī)程序相融合,能夠快速地完成數(shù)據(jù)信息交互流程。

        2 HTTP協(xié)議

        2.1 HTTP協(xié)議及工作流程

        HTTP協(xié)議中文名為超文本傳輸協(xié)議,是一個(gè)基于請(qǐng)求與響應(yīng)模式的、無(wú)狀態(tài)的、應(yīng)用層的協(xié)議,以TCP協(xié)議為基礎(chǔ)進(jìn)行數(shù)據(jù)傳輸[1,2]。

        HTTP服務(wù)端啟動(dòng)服務(wù)并偵聽HTTP客戶端請(qǐng)求,客戶端封裝請(qǐng)求頭、請(qǐng)求體后發(fā)出請(qǐng)求。服務(wù)端偵聽到客戶端請(qǐng)求后進(jìn)行解析并處理,封裝響應(yīng)頭、響應(yīng)體,返回響應(yīng)消息,完成一次客戶端與服務(wù)端信息交互流程。HTTP協(xié)議工作流程如圖1所示。

        圖1 HTTP協(xié)議工作流程

        2.2 HTTP協(xié)議常用方法

        (1)GET方法。獲取服務(wù)器上的某一特定資源,請(qǐng)求的數(shù)據(jù)信息附加在服務(wù)器接口路徑之后,以“?”分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)用“&”連接[3]。傳輸?shù)臄?shù)據(jù)大小受URL長(zhǎng)度限制,少量的數(shù)據(jù)傳輸適宜采用GET方法進(jìn)行資源請(qǐng)求。

        (2)POST方法。向服務(wù)器提交資源讓服務(wù)器處理,比如提交表達(dá)、上傳文件等。請(qǐng)求的數(shù)據(jù)放置在HTTP請(qǐng)求包的包體中,理論上傳輸?shù)臄?shù)據(jù)大小不受限制。

        (3)PUT方法。向服務(wù)器發(fā)送請(qǐng)求。如果URL不存在,服務(wù)器根據(jù)請(qǐng)求創(chuàng)建資源;如果URL存在,根據(jù)請(qǐng)求修改URL資源[4]。

        (4)DELETE方法。請(qǐng)求服務(wù)器刪除某一特定資源。

        2.3 HTTP協(xié)議特性

        (1)安全性

        HTTP協(xié)議安全性較差。HTTP協(xié)議屬于明文傳輸協(xié)議,數(shù)據(jù)交互過程沒有進(jìn)行任何加密及通信認(rèn)證。GET方法更是將請(qǐng)求的數(shù)據(jù)信息完全顯示在URL路徑之后,無(wú)需任何數(shù)據(jù)解析便可直接獲取請(qǐng)求數(shù)據(jù)內(nèi)容。若對(duì)數(shù)據(jù)安全性要求較高,不建議使用HTTP協(xié)議,可采用HTTPS協(xié)議實(shí)現(xiàn)。

        (2)可靠性

        HTTP協(xié)議基于TCP協(xié)議進(jìn)行數(shù)據(jù)傳輸。TCP協(xié)議是一個(gè)連接傳輸協(xié)議,因此HTTP協(xié)議數(shù)據(jù)傳輸可靠性較高。

        (3)靈活、擴(kuò)展性

        HTTP協(xié)議對(duì)于報(bào)文沒有太多限制,可根據(jù)實(shí)際情況靈活擴(kuò)展,程序改動(dòng)量較小。

        3 基于HTTP協(xié)議的上位機(jī)程序設(shè)計(jì)與實(shí)例

        自動(dòng)校直機(jī)傳輸?shù)臄?shù)據(jù)主要分以下兩部分:一部分為設(shè)備實(shí)時(shí)狀態(tài)數(shù)據(jù),另一部分為產(chǎn)品加工數(shù)據(jù)。保持著程序高內(nèi)聚、低耦合的設(shè)計(jì)思想,將上位機(jī)程序設(shè)計(jì)成既是服務(wù)端,又是客戶端。服務(wù)端負(fù)責(zé)監(jiān)聽MES系統(tǒng)請(qǐng)求,將設(shè)備實(shí)時(shí)工作狀態(tài)數(shù)據(jù)進(jìn)行封裝,作為請(qǐng)求響應(yīng)返回給MES系統(tǒng)??蛻舳送ㄟ^POST方法向MES系統(tǒng)服務(wù)器發(fā)送產(chǎn)品加工數(shù)據(jù),實(shí)現(xiàn)產(chǎn)品校直工藝數(shù)據(jù)的可追溯功能。根據(jù)上述設(shè)計(jì)思想,程序設(shè)計(jì)流程如圖2所示。

        圖2 程序設(shè)計(jì)流程圖

        上位機(jī)程序在.NET Framework 4.5框架上進(jìn)行開發(fā),工程項(xiàng)目引用System.Web.dll,并添加System.Net、System.Web命名空間。

        3.1 HTTP服務(wù)端程序?qū)嵗?/h3>

        (1)啟動(dòng)服務(wù)端

        通過以下方式啟動(dòng)服務(wù)器:

        //port為服務(wù)端偵聽端口

        listener = new TcpListener(port);

        listener.Start();

        (2)解析客戶端請(qǐng)求并響應(yīng)

        服務(wù)端調(diào)用AcceptTcpClient()偵聽客戶端請(qǐng)求。

        public void process()

        {

        Task.Factory.StartNew(() =>

        {

        inputStream=

        new BufferedStream(socket.GetStream());

        outputStream = New StreamWriter

        (new BufferedStream(socket.GetStream()));

        try

        {

        parseRequest();

        readHeaders();

        if (http_method.Equals("GET"))

        handleGETRequest();

        else if (http_method.Equals("POST"))

        handlePOSTRequest();

        }

        catch (Exception e)

        {

        Console.WriteLine("Exception: " + e.ToString

        ());

        writeFailure();

        }

        outputStream.Flush();

        inputStream = null;

        outputStream = null;

        socket.Close();

        });

        }

        上述程序Socket變量為AcceptTcpClient()的返回值,通過以上程序可完成客戶端請(qǐng)求方法及對(duì)數(shù)據(jù)進(jìn)行解析。

        3.2 HTTP客戶端程序?qū)嵗?/h3>

        客戶端程序主要調(diào)用GET方法與POST方法進(jìn)行資源請(qǐng)求與發(fā)送。HttpWebRequest類屬性設(shè)置如下:

        KeepAlive屬性:客戶端設(shè)置是否與服務(wù)端建立持續(xù)型連接,默認(rèn)值為true。

        Method屬性:客戶端設(shè)置請(qǐng)求的方法,默認(rèn)值為GET。

        ContentType屬性:客戶端設(shè)置HTTP標(biāo)頭的數(shù)據(jù)格式,默認(rèn)值為null。

        Timeout屬性:客戶端設(shè)置請(qǐng)求超時(shí)前等待的毫秒數(shù),默認(rèn)值為100s。

        (1)GET方法程序

        public static string Get(string Url)

        {

        HttpWebRequest getrequest = (HttpWebRequest)

        WebRequest.Create(Url);

        getrequest.Proxy = null;

        getrequest.KeepAlive = false;

        getrequest.Method = "GET";

        getrequest.ContentType =

        "application/json; charset=UTF-8";

        getrequest.AutomaticDecompression = DecompressionMethods.GZip;

        getrequest.Timeout = 2 * 1000;

        HttpWebResponse getresponse =(HttpWebResponse)

        getrequest.GetResponse();

        Stream myResponseStream

        getresponse.GetResponseStream();

        StreamReader mygetStreamReader = new

        StreamReader(myResponseStream, Encoding.UTF8);

        string retgetString =

        mygetStreamReader.ReadToEnd();

        mygetStreamReader.Close();

        myResponseStream.Close();

        if (getresponse !=null)

        getresponse.Close();

        if (getrequest !=null)

        getrequest.Abort();

        return retgetString;

        }

        (2)POST方法程序

        public static string Post(string Url, string Data, string Referer = null)

        {

        HttpWebRequest postrequest =

        (HttpWebRequest)WebRequest.Create(Url);

        postrequest.Method = "POST";

        postrequest.Referer = Referer;

        byte[] bytes = Encoding.UTF8.GetBytes(Data);

        postrequest.ContentType =

        "application/x-www-form-urlencoded";

        postrequest.ContentLength = bytes.Length;

        postrequest.Timeout = 2 * 1000;

        Stream myResponseStream =

        postrequest.GetRequestStream();

        myResponseStream.Write(bytes, 0, bytes.Length);

        HttpWebResponse postresponse =

        (HttpWebResponse) postrequest.GetResponse();

        StreamReader mypostStreamReader = new

        StreamReader(postresponse.GetResponseStream(), Encoding.UTF8);

        string retpostString =

        mypostStreamReader.ReadToEnd();

        mypostStreamReader.Close();

        myResponseStream.Close();

        if (postresponse != null)

        postresponse.Close();

        if (postrequest != null)

        postrequest.Abort();

        return retpostString;

        }

        3.3 開發(fā)注意事項(xiàng)

        (1)服務(wù)端調(diào)用AcceptTcpClient()會(huì)阻塞線程執(zhí)行,直至客戶端發(fā)起請(qǐng)求。可在調(diào)用AcceptTcpClient()前調(diào)用Pending()判斷當(dāng)前是否存在掛起的連接請(qǐng)求。若存在則調(diào)用AcceptTcpClient()獲取請(qǐng)求數(shù)據(jù),若不存在則等待下一次輪詢。具體代碼如下:

        While(true)

        {

        if(tcpListener.Pending())

        tcpListener.AcceptTcpClient();

        }

        (2)服務(wù)端處理連接請(qǐng)求時(shí)可能耗時(shí)較長(zhǎng),由于自動(dòng)校直機(jī)各軸位置控制對(duì)實(shí)時(shí)性要求較高,本程序采用任務(wù)模式進(jìn)行數(shù)據(jù)處理,Action為連接請(qǐng)求處理函數(shù)Task.Factory.StartNew(()=>Action)。

        4 結(jié) 論

        本文詳細(xì)介紹了基于HTTP協(xié)議進(jìn)行數(shù)據(jù)傳輸?shù)某绦蛟O(shè)計(jì)與實(shí)例。上位機(jī)采用C#程序開發(fā),使用HTTP協(xié)議傳輸數(shù)據(jù)極大減少了復(fù)雜的通信協(xié)議開發(fā)流程,程序簡(jiǎn)潔、可讀性高、可擴(kuò)展性強(qiáng),而且設(shè)計(jì)周期短,數(shù)據(jù)傳輸效率高。目前現(xiàn)場(chǎng)的應(yīng)用情況表明,系統(tǒng)穩(wěn)定可靠運(yùn)行,可以廣泛地應(yīng)用到其他設(shè)備上,為MES數(shù)據(jù)傳輸提供了一種新的可靠傳輸方式。

        猜你喜歡
        服務(wù)端程序設(shè)計(jì)客戶端
        基于Visual Studio Code的C語(yǔ)言程序設(shè)計(jì)實(shí)踐教學(xué)探索
        從細(xì)節(jié)入手,談PLC程序設(shè)計(jì)技巧
        電子制作(2019年9期)2019-05-30 09:42:04
        云存儲(chǔ)中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
        縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
        孵化垂直頻道:新聞客戶端新策略
        基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
        新時(shí)期《移動(dòng)Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
        在Windows Server 2008上創(chuàng)建應(yīng)用
        高職高專院校C語(yǔ)言程序設(shè)計(jì)教學(xué)改革探索
        PLC梯形圖程序設(shè)計(jì)技巧及應(yīng)用
        人妻 丝袜美腿 中文字幕| 99久久精品国产片| 免费av在线视频播放| 中文字幕av熟女中文av| 少妇爆乳无码专区| 亚洲欧美日本| 精品久久亚洲一级α| 国产一区二区白浆在线观看| 丝袜美腿亚洲一区二区| 中文字幕精品一区二区2021年| 综合无码一区二区三区四区五区 | 日韩丝袜人妻中文字幕| 亚洲国产丝袜久久久精品一区二区| 人妻插b视频一区二区三区| 国产suv精品一区二区69| 91网红福利精品区一区二| 乳乱中文字幕熟女熟妇| 国产成人精品一区二区三区| 亚洲综合久久成人a片| 久久久久久久久高潮无码| 九七青青草视频在线观看| 色欲aⅴ亚洲情无码av| 精品午夜福利1000在线观看| 亚洲精品国产精品av| 青青草成人免费在线视频| 国精产品一区一区三区有限公司杨 | 加勒比日韩视频在线观看| 毛片无码国产| 亞洲綜合一區二區三區無碼| 国产一品二品三品精品久久| 在线观看一级黄片天堂| 亚洲色欲综合一区二区三区| 成年女人在线观看毛片| 久久少妇高潮免费观看| 欧美亚洲日本国产综合在线美利坚| 免费无码肉片在线观看| 黄色三级视频中文字幕| 女色av少妇一区二区三区| 国产午夜精品一区二区三区软件| 日本精品免费一区二区三区| 人妻精品一区二区三区蜜桃|