chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于VC6.0平臺(tái)實(shí)現(xiàn)組播技術(shù)的方法及在飛行仿真系統(tǒng)中的應(yīng)用研究

電子設(shè)計(jì) ? 來源:電子工程網(wǎng) ? 作者:高玉寶 ? 2021-05-16 10:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

飛行仿真系統(tǒng)是現(xiàn)代航空科研、教學(xué)、試驗(yàn)等不可缺少的技術(shù)設(shè)備。在飛行性能研究、飛行品質(zhì)評(píng)估和飛行訓(xùn)練等方面都具有很高的經(jīng)濟(jì)價(jià)值和軍事價(jià)值。正常情況下,飛行仿真系統(tǒng)采用分布式計(jì)算技術(shù),整個(gè)系統(tǒng)由多臺(tái)計(jì)算機(jī)組成,各計(jì)算機(jī)之間的數(shù)據(jù)傳輸需要采用數(shù)據(jù)通信技術(shù)來完成。數(shù)據(jù)通信技術(shù)需要采用網(wǎng)絡(luò)協(xié)議,目前互聯(lián)網(wǎng)采用的協(xié)議是IPv4協(xié)議。

IPv4是互聯(lián)網(wǎng)協(xié)議(Internet Protocol,IP)的第四版,它定義的IP數(shù)據(jù)通信方式有單播、全網(wǎng)廣播和組播。單播是指兩個(gè)IP地址間進(jìn)行的數(shù)據(jù)通信;全網(wǎng)廣播是指在IP子網(wǎng)內(nèi)向所有網(wǎng)內(nèi)IP地址以廣播的方式發(fā)送數(shù)據(jù)包,所有子網(wǎng)內(nèi)的IP站都能收到全網(wǎng)廣播;組播是當(dāng)某一個(gè)人向一組人發(fā)送數(shù)據(jù)時(shí),他不必將數(shù)據(jù)向每一個(gè)人發(fā)送,只須將數(shù)據(jù)發(fā)送到一個(gè)特定的預(yù)約組地址,所有加入該組的人均可以收到這份數(shù)據(jù)。

為了讓網(wǎng)絡(luò)中的多個(gè)主機(jī)可以同時(shí)接受到相同的數(shù)據(jù)包,如果采用單播的方式,那么源主機(jī)必須分別發(fā)送相同的數(shù)據(jù)包。對(duì)于一臺(tái)主機(jī)來說,同時(shí)不停的發(fā)送相同的數(shù)據(jù)包來說也是一個(gè)很大的負(fù)擔(dān)。如果采用采用廣播方式,則數(shù)據(jù)包傳送到局域網(wǎng)內(nèi)每個(gè)主機(jī)上,不管這個(gè)主機(jī)是否對(duì)數(shù)據(jù)包感興趣,這樣做就會(huì)造成了帶寬的浪費(fèi)和主機(jī)的資源浪費(fèi)。如果采用組播的方式,源主機(jī)可以只需要發(fā)送一個(gè)數(shù)據(jù)包就可以到達(dá)每個(gè)需要接受的主機(jī)上,這中間還要取決于路由器對(duì)組員和組關(guān)系的維護(hù)和選擇。組播有一套對(duì)組員和組之間關(guān)系維護(hù)的機(jī)制,可以明確的知道在某個(gè)子網(wǎng)中,是否有主機(jī)對(duì)這類組播數(shù)據(jù)包感興趣,如果沒有就不會(huì)把數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā),并會(huì)通知上游路由器不要再轉(zhuǎn)發(fā)這類數(shù)據(jù)包到下游路由器上。InternetNIC關(guān)于IP地址的規(guī)定中,IP地址共分為A-E共5類, D類地址即為組播地址,范圍為224.0.0.0-239.255.255.255。D類地址是動(dòng)態(tài)分配和恢復(fù)的瞬態(tài)地址。每一個(gè)組播組對(duì)應(yīng)于動(dòng)態(tài)分配的一個(gè)D類地址;當(dāng)組播組結(jié)束組播時(shí),相對(duì)應(yīng)的D類地址將被回收,用于以后的組播。

根據(jù)以上所述,運(yùn)用組播技術(shù),對(duì)發(fā)送者而言,數(shù)據(jù)只需發(fā)送一次就可以發(fā)送到所有接收者,所以,組播技術(shù)對(duì)于接收者來說,都是同時(shí)接收到相同的數(shù)據(jù),這使得對(duì)計(jì)算機(jī)接收數(shù)據(jù)的同步性得到很好的控制,縮短了發(fā)送的時(shí)間周期,從而大大減輕了發(fā)送者的負(fù)擔(dān)和網(wǎng)絡(luò)的負(fù)載,節(jié)省了大量資源。

1 飛行仿真系統(tǒng)的組成及通信機(jī)制

一個(gè)典型的飛行仿真系統(tǒng)包括:飛行系統(tǒng)、火控系統(tǒng)、音響系統(tǒng)、運(yùn)動(dòng)系統(tǒng)、教員臺(tái)系統(tǒng)、導(dǎo)航系統(tǒng)、儀表系統(tǒng)、操縱系統(tǒng)、多臺(tái)視景計(jì)算機(jī)等,如圖1所示。其中飛行系統(tǒng)控制整個(gè)飛行仿真系統(tǒng),是整個(gè)系統(tǒng)的核心;儀表系統(tǒng)是顯示飛機(jī)坐艙內(nèi)各個(gè)儀表盤,通過儀表盤來顯示飛機(jī)飛行的狀態(tài);操縱系統(tǒng)是控制飛機(jī)飛行的姿態(tài);多臺(tái)視景計(jì)算機(jī)顯示的是飛機(jī)在同一位置時(shí)的不同角度。

圖1 飛行仿真系統(tǒng)的通信結(jié)構(gòu)(實(shí)線表示網(wǎng)絡(luò))

根據(jù)圖1所示,可以看出整個(gè)系統(tǒng)的數(shù)據(jù)傳輸過程。如果用單播通信方式,那么飛行系統(tǒng)計(jì)算機(jī)會(huì)重復(fù)發(fā)送相同的數(shù)據(jù)給多臺(tái)視景計(jì)算機(jī),增加了發(fā)送的時(shí)間周期,這樣就會(huì)導(dǎo)致飛行系統(tǒng)計(jì)算機(jī)的工作任務(wù)的重復(fù)和網(wǎng)絡(luò)資源的浪費(fèi),并且單播在發(fā)送數(shù)據(jù)時(shí)有先有后,因此五臺(tái)視景顯示計(jì)算機(jī)不是同時(shí)收到飛行系統(tǒng)計(jì)算機(jī)的數(shù)據(jù),這樣就會(huì)導(dǎo)致多臺(tái)視景計(jì)算機(jī)幀與幀之間不同步,這不符合實(shí)時(shí)顯示的要求。如果采用廣播通信方式,則操縱系統(tǒng)計(jì)算機(jī)也會(huì)收到控制計(jì)算機(jī)的數(shù)據(jù),而事實(shí)上是操縱系統(tǒng)計(jì)算機(jī)用不到飛行系統(tǒng)計(jì)算機(jī)的信息,這樣會(huì)導(dǎo)致網(wǎng)絡(luò)資源的浪費(fèi)。如果采用組播的通信方式,飛行仿真系統(tǒng)中所有的計(jì)算機(jī)同在一個(gè)組播組中,這樣飛行系統(tǒng)計(jì)算機(jī)發(fā)送一次數(shù)據(jù),則有關(guān)計(jì)算機(jī)都會(huì)同時(shí)接收到相同的數(shù)據(jù),多臺(tái)視景計(jì)算機(jī)可以實(shí)時(shí)的顯示飛機(jī)飛行的姿態(tài),不會(huì)存在幀與幀之間不同步的問題。所以綜合以上分析,我們?cè)趯?shí)驗(yàn)系統(tǒng)中采用組播技術(shù)來實(shí)現(xiàn)網(wǎng)絡(luò)通信。

2 組播技術(shù)的實(shí)現(xiàn)

本節(jié)是介紹在VC6.0平臺(tái)上如何用winsock實(shí)現(xiàn)組播通信編程的方法。

2.1 用winsock實(shí)現(xiàn)組播的方法

本系統(tǒng)采用VC6.0為開發(fā)工具。對(duì)于網(wǎng)絡(luò)編程而言,需要用到多線程技術(shù)。在VC6.0開發(fā)環(huán)境中,開啟一個(gè)線程用到AfxBeginThread()函數(shù),AfxBeginThread(RecvThread, &m_mysock);其中RecvThread()函數(shù)是線程函數(shù),主要是用來接收和發(fā)送數(shù)據(jù)的;m_mysock是自己封裝的一個(gè)類CMySocket的對(duì)象,這個(gè)類封裝所有有關(guān)組播通信的信息,如:線程函數(shù)中接收的數(shù)據(jù)存入該類的變量中。

對(duì)于Socket編程,首先要對(duì)sockaddr_in結(jié)構(gòu)體進(jìn)行初始化,就是把組播地址和端口號(hào)分別賦值給sockaddr_in中的s_addr和sin_port,具體實(shí)現(xiàn)如下代碼:

Local.sin_addr.s_addr =inet_addr(“234.0.0.0”);

Local.sin_family = AF_INET;

Local.sin_port= htons( 2007 );

其中Local是sockaddr_in結(jié)構(gòu)變量,組播地址為:234.0.0.0,端口號(hào):2007。

然后是對(duì)套接字的初始化了,定義SOCKET的變量為sock,

sock = socket (AF_INET,SOCK_DGRAM,0);其中SOCK_DGRAM表示為采用UDP協(xié)議(SOCK_STREAM表示為TCP協(xié)議)。

初始化之后用bind()函數(shù)將套接字與IP地址和端口號(hào)綁定起來,bind (sock,(sockaddr*)&( Local),sizeof(Local));

其中sock與Local定義同上。

組播技術(shù)用setsockopt()函數(shù)的套接字功能選項(xiàng)來進(jìn)行設(shè)置, setsockopt()函數(shù)有關(guān)組播技術(shù)的選項(xiàng)見下表:

表1 setsockopt()組播選項(xiàng)說明

發(fā)送數(shù)據(jù)用到sendto()函數(shù),用這個(gè)函數(shù)向組播地址發(fā)送數(shù)據(jù),sendto(sock,buffer,sizeof(buffer),0,(sockaddr*)&Local,sizeof(Local));

其中buffer所存放的就是所要發(fā)送的數(shù)據(jù)。這里介紹一下buffer中存放數(shù)據(jù)的形式,buffer是一個(gè)字符數(shù)組,它的前四位放的是本機(jī)的計(jì)算機(jī)名字;5到8位存放的是命令,這個(gè)命令是指要讓接收方做什么事情;從9位以后全部都是數(shù)據(jù),這些數(shù)據(jù)就是讓接收方利用這些數(shù)據(jù)完成各自的任務(wù)。這個(gè)主要是因?yàn)榘l(fā)送方發(fā)送數(shù)據(jù)到組播地址后,所有的接收方都會(huì)到網(wǎng)組播地址上取數(shù)據(jù),對(duì)于每個(gè)接收方,有可能接收的數(shù)據(jù)對(duì)于自己是無用的,所以在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)頭加上前面所講的1到8位的識(shí)別信息,接收方可以根據(jù)這些信息來獲取對(duì)自己有用的數(shù)據(jù)。接收數(shù)據(jù)用到recvfrom()函數(shù),這個(gè)函數(shù)是接收網(wǎng)絡(luò)上的數(shù)據(jù)的,recvfrom(sock,recvBuff,1024,0,(sockaddr*)&clientsock,&sizeof(clientsock));recvBuff是字符數(shù)組,把接收過來的數(shù)據(jù)存放到這個(gè)數(shù)組中。然后,我們要對(duì)這個(gè)數(shù)據(jù)進(jìn)行解析,也就是前面所講的發(fā)送時(shí)所加的數(shù)據(jù)包頭的信息。接收到數(shù)據(jù)以后,先對(duì)數(shù)據(jù)包的前四位進(jìn)行判別,判別是從哪個(gè)計(jì)算機(jī)上發(fā)送來的信息。再對(duì)5到8位進(jìn)行判別,判別是什么信息,也就是什么命令。根據(jù)數(shù)據(jù)包前8位的信息,如果是本機(jī)將要用到的數(shù)據(jù),則對(duì)數(shù)據(jù)包前8位以后的數(shù)據(jù)進(jìn)行提?。环駝t,對(duì)接收來的數(shù)據(jù)舍棄不用。

2.2 數(shù)據(jù)傳輸?shù)挠行?/p>

在前面講過組播的主要缺點(diǎn)是沒有糾錯(cuò)機(jī)制,發(fā)生丟包錯(cuò)包后難以彌補(bǔ)。也就是說在數(shù)據(jù)傳輸過程中無法保證接收的數(shù)據(jù)與發(fā)送的數(shù)據(jù)一致,這樣可導(dǎo)致實(shí)時(shí)仿真不同步,以至多臺(tái)視景計(jì)算機(jī)不能實(shí)時(shí)觀察飛機(jī)飛行的不同的角度,為了解決這個(gè)問題,采取兩種方案予以彌補(bǔ)。

2.2.1采用時(shí)間等待

時(shí)間等方法是運(yùn)用select()函數(shù)。select()函數(shù)用法是如果程序要檢查套接字上在設(shè)定的時(shí)間范圍內(nèi)(timeout =5ms)是否有數(shù)據(jù)到來,則首先需要把套接字句柄加入可讀性監(jiān)視集合中,然后調(diào)用select()函數(shù)。如果沒有數(shù)據(jù)到來,則再等下一個(gè)5ms,一直等到網(wǎng)絡(luò)上有數(shù)據(jù)為止。select()函數(shù)具體實(shí)現(xiàn)如下代碼:

if(select(NULL,NULL,&fds,NULL,&timeout)==-1)

exit(-1);

else if(select(NULL,NULL,&fds,NULL,&timeout)==0)

continue;

else if(FD_ISSET(sock,& fds))

但是這個(gè)方法也有一定的弊端,就是如果所有的視景計(jì)算機(jī)中某幾臺(tái)視景計(jì)算機(jī)在接收數(shù)據(jù)的過程中等待的時(shí)間長(zhǎng),那么所有的視景機(jī)一定不會(huì)同時(shí)獲得相同數(shù)據(jù),這樣就會(huì)導(dǎo)致多臺(tái)視景計(jì)算機(jī)視景不同步。

2.2.2 發(fā)送副本方法

在發(fā)送端發(fā)送數(shù)據(jù)時(shí),同時(shí)要發(fā)送這個(gè)數(shù)據(jù)的一個(gè)或多個(gè)副本,在接收端接收數(shù)據(jù)時(shí),如果發(fā)現(xiàn)接收的數(shù)據(jù)不正確,則到其它副本取數(shù)據(jù),這樣會(huì)彌補(bǔ)接收數(shù)據(jù)的不可靠性。

3 結(jié)束語

由于組播技術(shù)采用的是UDP協(xié)議,UDP協(xié)議的主要特點(diǎn)是數(shù)據(jù)傳輸速度快,所以在飛行仿真系統(tǒng)中數(shù)據(jù)傳輸速度問題可以得到解決。在飛行仿真系統(tǒng)中,視景顯示是該系統(tǒng)中的重點(diǎn)。如果多臺(tái)視景機(jī)不同步顯示,則會(huì)造成觀察者無法對(duì)飛機(jī)飛行進(jìn)行有效的控制,繼而對(duì)整個(gè)系統(tǒng)無法控制。組播技術(shù)是只發(fā)送一次數(shù)據(jù),同在一個(gè)組播地址內(nèi)的計(jì)算機(jī)都會(huì)接收到這些數(shù)據(jù),根據(jù)圖1中所示,飛行系統(tǒng)計(jì)算機(jī)向視景計(jì)算機(jī)發(fā)送數(shù)據(jù)之后,視景計(jì)算機(jī)會(huì)同時(shí)接收到相同的數(shù)據(jù),這樣,視景計(jì)算機(jī)就會(huì)根據(jù)接收到的數(shù)據(jù)來做飛機(jī)飛行相應(yīng)的動(dòng)作。所以,利用組播技術(shù),可以使視景計(jì)算機(jī)顯示同步的問題得到解決。在飛行仿真系統(tǒng)中通過利用select()函數(shù)和發(fā)送副本的方式,可以使彌補(bǔ)數(shù)據(jù)在傳輸過程中的可靠性。利用以上的方法,在飛行仿真系統(tǒng)中,數(shù)據(jù)傳輸?shù)乃俣?、視景?jì)算機(jī)的同步性和數(shù)據(jù)傳輸?shù)目煽啃远嫉玫搅撕芎玫尿?yàn)證。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 互聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    55

    文章

    11239

    瀏覽量

    106010
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7642

    瀏覽量

    90466
  • 仿真系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    104

    瀏覽量

    21143
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    容錯(cuò)技術(shù)電視臺(tái)系統(tǒng)應(yīng)用的探討

    容錯(cuò)技術(shù)電視臺(tái)系統(tǒng)應(yīng)用的探討
    發(fā)表于 10-06 09:33

    匿名聯(lián)合體結(jié)構(gòu)體VC6.0環(huán)境不支持?

    定義匿名聯(lián)合體和結(jié)構(gòu)體VC6.0環(huán)境怎么總出錯(cuò)?union{unsigned char P1;struct{ unsigned char P10 :1; unsigned char P11 :1
    發(fā)表于 11-22 15:16

    labview與vc6.0連接

    我想實(shí)現(xiàn)labview與VC6.0的混合編程實(shí)現(xiàn)龍格庫塔算法,拜求大神幫忙
    發(fā)表于 10-17 10:49

    分享:uc/OSII VC6.0 環(huán)境

    這是盧有亮老師《嵌入式實(shí)時(shí)操作系統(tǒng)uc/osII原理與實(shí)踐》的配套程序,測(cè)試可用,大家可以用來vc6.0熟悉uc/osII系統(tǒng)的原理來,{:12:}
    發(fā)表于 12-13 19:21

    VC6.0 win7可以用的

    新人報(bào)道,求win7能用的VC6.0,多謝多謝
    發(fā)表于 07-23 16:40

    VC6.0調(diào)用MATLAB2015a

    請(qǐng)問VC6.0版本能夠調(diào)用MATLAB2015a嗎,VC的版本會(huì)不會(huì)太低了,有高版本的VC嗎?如果可以調(diào)用的話有哪幾種方法呢?我是新手,希望大神們可以不吝賜教
    發(fā)表于 08-18 11:07

    請(qǐng)問UCOSVC6.0下如何調(diào)用PC函數(shù)?

    我把任哲源碼的PC函數(shù)加到我的VC6.0下用不了,誰有VC6.0下的PC函數(shù)沒?
    發(fā)表于 04-23 23:33

    VC6.0無法打開文件該怎么辦?

    安裝的VC6.0無法打開文件 或添加文件到工程 下載補(bǔ)丁filetool.dll 按照流程做下來 可以了 可是每次重新打開又會(huì)變回原來的樣子 還要重新弄一遍 另外一個(gè)很惱人的問題是 工程下右擊
    發(fā)表于 08-27 03:46

    c語言編程軟件vc6.0文綠色版_vc6.0官方下載

    c語言編程軟件vc6.0文綠色版是一款免安裝中文軟件,點(diǎn)擊直接使用,無需安裝。 vc6.0簡(jiǎn)介: 1、vc6.0是windows環(huán)境下最主要的應(yīng)用開發(fā)
    發(fā)表于 10-15 09:05 ?0次下載
    c語言編程軟件<b class='flag-5'>vc6.0</b><b class='flag-5'>中</b>文綠色版_<b class='flag-5'>vc6.0</b>官方下載

    c語言編程軟件vc6.0使用教程_vc6.0怎么用

    c語言編程軟件vc6.0使用教程,附件包含二個(gè)教程文件,VC++6.0培訓(xùn)教程完整版及VC6.0介紹。 Visual C++ 6.0,簡(jiǎn)稱VC
    發(fā)表于 10-15 09:23 ?483次下載
    c語言編程軟件<b class='flag-5'>vc6.0</b>使用教程_<b class='flag-5'>vc6.0</b>怎么用

    vc6.0精簡(jiǎn)版安裝程序

    電子發(fā)燒友網(wǎng)站提供《vc6.0精簡(jiǎn)版安裝程序.exe》資料免費(fèi)下載
    發(fā)表于 11-16 15:41 ?0次下載

    VC6.0代碼補(bǔ)全插件

    VC6.0代碼補(bǔ)全插件,挺好用的,自動(dòng)補(bǔ)全的小工具
    發(fā)表于 12-08 18:14 ?9次下載

    vc6.0 簡(jiǎn)單教程

    vc6.0 簡(jiǎn)單教程
    發(fā)表于 03-04 17:48 ?8次下載

    使用VC6.0實(shí)現(xiàn)微機(jī)與多個(gè)51單片機(jī)通信的詳細(xì)資料說明

    本文介紹了利用VC6.0 語言的通信控件實(shí)現(xiàn)微機(jī)與多個(gè)MCS-51 單片機(jī)之間的通信。 給出了系統(tǒng)設(shè)計(jì)和通信協(xié)議。 本系統(tǒng)工業(yè)控制
    發(fā)表于 10-15 16:31 ?12次下載
    使用<b class='flag-5'>VC6.0</b><b class='flag-5'>實(shí)現(xiàn)</b>微機(jī)與多個(gè)51單片機(jī)通信的詳細(xì)資料說明

    VC6.0應(yīng)用程序和C++程序與工程文件合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是VC6.0應(yīng)用程序和C++程序與工程文件合集免費(fèi)下載。
    發(fā)表于 11-04 17:50 ?13次下載