在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于VC6.0平臺實現組播技術的方法及在飛行仿真系統中的應用研究

電子設計 ? 來源:電子工程網 ? 作者:高玉寶 ? 2021-05-16 10:13 ? 次閱讀

引言

飛行仿真系統是現代航空科研、教學、試驗等不可缺少的技術設備。在飛行性能研究、飛行品質評估和飛行訓練等方面都具有很高的經濟價值和軍事價值。正常情況下,飛行仿真系統采用分布式計算技術,整個系統由多臺計算機組成,各計算機之間的數據傳輸需要采用數據通信技術來完成。數據通信技術需要采用網絡協議,目前互聯網采用的協議是IPv4協議。

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

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

根據以上所述,運用組播技術,對發送者而言,數據只需發送一次就可以發送到所有接收者,所以,組播技術對于接收者來說,都是同時接收到相同的數據,這使得對計算機接收數據的同步性得到很好的控制,縮短了發送的時間周期,從而大大減輕了發送者的負擔和網絡的負載,節省了大量資源。

1 飛行仿真系統的組成及通信機制

一個典型的飛行仿真系統包括:飛行系統、火控系統、音響系統、運動系統、教員臺系統、導航系統、儀表系統、操縱系統、多臺視景計算機等,如圖1所示。其中飛行系統控制整個飛行仿真系統,是整個系統的核心;儀表系統是顯示飛機坐艙內各個儀表盤,通過儀表盤來顯示飛機飛行的狀態;操縱系統是控制飛機飛行的姿態;多臺視景計算機顯示的是飛機在同一位置時的不同角度。

圖1 飛行仿真系統的通信結構(實線表示網絡)

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

2 組播技術的實現

本節是介紹在VC6.0平臺上如何用winsock實現組播通信編程的方法。

2.1 用winsock實現組播的方法

本系統采用VC6.0為開發工具。對于網絡編程而言,需要用到多線程技術。在VC6.0開發環境中,開啟一個線程用到AfxBeginThread()函數,AfxBeginThread(RecvThread, &m_mysock);其中RecvThread()函數是線程函數,主要是用來接收和發送數據的;m_mysock是自己封裝的一個類CMySocket的對象,這個類封裝所有有關組播通信的信息,如:線程函數中接收的數據存入該類的變量中。

對于Socket編程,首先要對sockaddr_in結構體進行初始化,就是把組播地址和端口號分別賦值給sockaddr_in中的s_addr和sin_port,具體實現如下代碼:

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

Local.sin_family = AF_INET;

Local.sin_port= htons( 2007 );

其中Local是sockaddr_in結構變量,組播地址為:234.0.0.0,端口號:2007。

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

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

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

其中sock與Local定義同上。

組播技術用setsockopt()函數的套接字功能選項來進行設置, setsockopt()函數有關組播技術的選項見下表:

表1 setsockopt()組播選項說明

發送數據用到sendto()函數,用這個函數向組播地址發送數據,sendto(sock,buffer,sizeof(buffer),0,(sockaddr*)&Local,sizeof(Local));

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

2.2 數據傳輸的有效性

在前面講過組播的主要缺點是沒有糾錯機制,發生丟包錯包后難以彌補。也就是說在數據傳輸過程中無法保證接收的數據與發送的數據一致,這樣可導致實時仿真不同步,以至多臺視景計算機不能實時觀察飛機飛行的不同的角度,為了解決這個問題,采取兩種方案予以彌補。

2.2.1采用時間等待

時間等方法是運用select()函數。select()函數用法是如果程序要檢查套接字上在設定的時間范圍內(timeout =5ms)是否有數據到來,則首先需要把套接字句柄加入可讀性監視集合中,然后調用select()函數。如果沒有數據到來,則再等下一個5ms,一直等到網絡上有數據為止。select()函數具體實現如下代碼:

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))

但是這個方法也有一定的弊端,就是如果所有的視景計算機中某幾臺視景計算機在接收數據的過程中等待的時間長,那么所有的視景機一定不會同時獲得相同數據,這樣就會導致多臺視景計算機視景不同步。

2.2.2 發送副本方法

在發送端發送數據時,同時要發送這個數據的一個或多個副本,在接收端接收數據時,如果發現接收的數據不正確,則到其它副本取數據,這樣會彌補接收數據的不可靠性。

3 結束語

由于組播技術采用的是UDP協議,UDP協議的主要特點是數據傳輸速度快,所以在飛行仿真系統中數據傳輸速度問題可以得到解決。在飛行仿真系統中,視景顯示是該系統中的重點。如果多臺視景機不同步顯示,則會造成觀察者無法對飛機飛行進行有效的控制,繼而對整個系統無法控制。組播技術是只發送一次數據,同在一個組播地址內的計算機都會接收到這些數據,根據圖1中所示,飛行系統計算機向視景計算機發送數據之后,視景計算機會同時接收到相同的數據,這樣,視景計算機就會根據接收到的數據來做飛機飛行相應的動作。所以,利用組播技術,可以使視景計算機顯示同步的問題得到解決。在飛行仿真系統中通過利用select()函數和發送副本的方式,可以使彌補數據在傳輸過程中的可靠性。利用以上的方法,在飛行仿真系統中,數據傳輸的速度、視景計算機的同步性和數據傳輸的可靠性都得到了很好的驗證。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 互聯網
    +關注

    關注

    54

    文章

    11155

    瀏覽量

    103309
  • 計算機
    +關注

    關注

    19

    文章

    7494

    瀏覽量

    87955
  • 仿真系統
    +關注

    關注

    1

    文章

    97

    瀏覽量

    20662
收藏 人收藏

    評論

    相關推薦

    容錯技術電視系統應用的探討

    容錯技術電視系統應用的探討
    發表于 10-06 09:33

    匿名聯合體結構體VC6.0環境不支持?

    定義匿名聯合體和結構體VC6.0環境怎么總出錯?union{unsigned char P1;struct{ unsigned char P10 :1; unsigned char P11 :1
    發表于 11-22 15:16

    labview與vc6.0連接

    我想實現labview與VC6.0的混合編程實現龍格庫塔算法,拜求大神幫忙
    發表于 10-17 10:49

    分享:uc/OSII VC6.0 環境

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

    VC6.0 win7可以用的

    新人報道,求win7能用的VC6.0,多謝多謝
    發表于 07-23 16:40

    VC6.0調用MATLAB2015a

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

    請問UCOSVC6.0下如何調用PC函數?

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

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

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

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

    c語言編程軟件vc6.0文綠色版是一款免安裝中文軟件,點擊直接使用,無需安裝。 vc6.0簡介: 1、vc6.0是windows環境下最主要的應用開發
    發表于 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使用教程,附件包含二個教程文件,VC++6.0培訓教程完整版及VC6.0介紹。 Visual C++ 6.0,簡稱VC
    發表于 10-15 09:23 ?483次下載
    c語言編程軟件<b class='flag-5'>vc6.0</b>使用教程_<b class='flag-5'>vc6.0</b>怎么用

    vc6.0精簡版安裝程序

    電子發燒友網站提供《vc6.0精簡版安裝程序.exe》資料免費下載
    發表于 11-16 15:41 ?0次下載

    VC6.0代碼補全插件

    VC6.0代碼補全插件,挺好用的,自動補全的小工具
    發表于 12-08 18:14 ?9次下載

    vc6.0 簡單教程

    vc6.0 簡單教程
    發表于 03-04 17:48 ?8次下載

    使用VC6.0實現微機與多個51單片機通信的詳細資料說明

    本文介紹了利用VC6.0 語言的通信控件實現微機與多個MCS-51 單片機之間的通信。 給出了系統設計和通信協議。 本系統工業控制
    發表于 10-15 16:31 ?12次下載
    使用<b class='flag-5'>VC6.0</b><b class='flag-5'>實現</b>微機與多個51單片機通信的詳細資料說明

    VC6.0應用程序和C++程序與工程文件合集免費下載

    本文檔的主要內容詳細介紹的是VC6.0應用程序和C++程序與工程文件合集免費下載。
    發表于 11-04 17:50 ?13次下載
    主站蜘蛛池模板: 东京毛片| 久久国产福利 | 校园激情综合网 | 天堂bt在线种子网 | fenfencao在线观看免费视频 | 大黄网站色多多 | 色婷婷视频在线 | 天天摸天天操天天爽 | 免费看男女下面日出水视频 | 久久狠色噜噜狠狠狠狠97 | 三级黄色免费网站 | 亚洲视频免费一区 | 亚洲啪啪免费视频 | 夜夜爽夜夜 | 午夜看片网站 | 成人毛片在线播放 | 青青青草国产 | 综合成人在线 | 亚洲成人综合在线 | 色先峰 | 天天色国产| 1区2区3区4区 | 四虎国产在线观看 | 全免费午夜一级毛片真人 | 日本aaaa级毛片在线看 | 一区在线观看 | 中国业余老太性视频 | 国产三级一区 | 亚洲精品久久久久影 | 激情性爽三级成人 | 天堂w| 亚洲合集综合久久性色 | 欧洲成人r片在线观看 | 天天鲁天天爽精品视频 | 四虎最新网址在线观看 | 婷婷色综合久久 | 涩色综合 | 最新亚洲人成网站在线影院 | 日本夜夜操| 亚洲第一色图 | 日韩毛片在线看 |