基于ADM5120的無(wú)線(xiàn)VoIP系統(tǒng)設(shè)計(jì)
(1)雙方分別建立socket,調(diào)用socket函數(shù):
s=socket(PF_INET,SOCK_DGRAM,O)
SOCK DGRAM表示套接字類(lèi)型為數(shù)據(jù)報(bào)套接字,即采用UDP協(xié)議進(jìn)行通信。
(2)綁定已設(shè)置好的自己的地址和端口信息,調(diào)用bind函數(shù):
bind(s,(struct sockaddr*)my_addr,sizeof(struct sockaddr))
(3)將select函數(shù)置于阻塞狀態(tài),直到監(jiān)視文件描述符集合rfds中某個(gè)文件描述符發(fā)生變化為止:
select(pCtrI一>rwd+1,rfds,IFX_NULL,IFX_NULL.NULL)
(4)數(shù)據(jù)傳輸:sendto()和recvfrom()用于在無(wú)連接的數(shù)據(jù)報(bào)socket方式下進(jìn)行數(shù)據(jù)傳輸。由于本地socket并沒(méi)有與遠(yuǎn)端機(jī)器建立連接,所以在發(fā)送數(shù)據(jù)時(shí)應(yīng)指明目的地址。如圖6所示,A作為發(fā)送方,通過(guò)其套接字用函數(shù)sendto()將其服務(wù)請(qǐng)求數(shù)據(jù)發(fā)送到接收方B的指定端口,B通過(guò)其套接字用函數(shù)recvfrom()接收數(shù)據(jù),處理好服務(wù)請(qǐng)求后又將服務(wù)應(yīng)答發(fā)回A,此時(shí)A便成了接收方,A接收應(yīng)答后還可繼續(xù)發(fā)送數(shù)據(jù)給B。
2.2 廣播通訊的實(shí)現(xiàn)
廣播和多播都用于實(shí)現(xiàn)向多個(gè)接收者發(fā)送UDP數(shù)據(jù)報(bào),但是廣播不像多播那樣在接收端有復(fù)雜的控制過(guò)程,因而實(shí)現(xiàn)比多播簡(jiǎn)單的多。以下廣播通訊的實(shí)現(xiàn)均在點(diǎn)對(duì)點(diǎn)通訊的基礎(chǔ)上實(shí)現(xiàn)的。
在發(fā)送方,只需要設(shè)置套接字socket的選項(xiàng)為允許發(fā)送廣播,然后在發(fā)送時(shí)指定目的IP為廣播地址即可。具體地,允許socket廣播通過(guò)setsockopt函數(shù)設(shè)置廣播選項(xiàng)來(lái)實(shí)現(xiàn),當(dāng)setsockopt參數(shù)optname為SO_BROADCAST時(shí),表示打開(kāi)或禁止從該socket廣播,當(dāng)參數(shù)optval為1時(shí)允許廣播,為0時(shí)禁止廣播。
系統(tǒng)編程實(shí)現(xiàn)廣播的部分源碼為:本文引用地址:http://www.ex-cimer.com/article/157548.htm
/*WIRLESS_IP_BROADCAST為廣播地址,其值是將網(wǎng)絡(luò)接口(本系統(tǒng)為athO)IP地址的主機(jī)ID部分設(shè)置為全1,網(wǎng)絡(luò)ID部分不變而得到*/
to_addr.sin_family=AF_INET;
據(jù)文獻(xiàn)所講,在接收方,一般不需做任何改動(dòng)即可收到廣播。但在本系統(tǒng)實(shí)現(xiàn)的實(shí)驗(yàn)過(guò)程中,當(dāng)將socket綁定到非INADDR ANY的IP地址時(shí),接收方無(wú)法收到廣播,并且沒(méi)有任何錯(cuò)誤指示,即需要綁定本地端口地址到通配地址INADDR ANY才可接收廣播:
my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
另外,本系統(tǒng)還實(shí)現(xiàn)了廣播強(qiáng)插功能,即不管用戶(hù)當(dāng)前處于摘機(jī)、撥號(hào)狀態(tài),還是處于通話(huà)狀態(tài),當(dāng)有廣播來(lái)電時(shí),都斷開(kāi)原來(lái)的連接而與廣播主叫建立新的連接(用戶(hù)不用掛機(jī))。為了防止通話(huà)混亂,本系統(tǒng)設(shè)定同一時(shí)刻只有擁有廣播控制權(quán)的用戶(hù)有發(fā)言權(quán),而其他用戶(hù)能聽(tīng)不能說(shuō),當(dāng)其他用戶(hù)想發(fā)言時(shí),只要按下“*”鍵就搶到了廣播控制權(quán),最后只有當(dāng)擁有廣播控制權(quán)的用戶(hù)掛機(jī)時(shí),廣播才停止,而任一其他用戶(hù)掛機(jī),不影響廣播通訊繼續(xù)進(jìn)行。
系統(tǒng)編程實(shí)現(xiàn)廣播強(qiáng)插的部分源碼見(jiàn)表1和表2。
3 結(jié)語(yǔ)
該系統(tǒng)設(shè)計(jì)完成后,成功地應(yīng)用于常德市某一電廠(chǎng),進(jìn)行生產(chǎn)調(diào)度,系統(tǒng)能實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通訊和廣播通訊,并且通話(huà)質(zhì)量良好,基本無(wú)雜音和抖動(dòng)。
本系統(tǒng)因自帶無(wú)線(xiàn)網(wǎng)卡可以自組織網(wǎng)絡(luò),它可以作為一種無(wú)線(xiàn)指令調(diào)度機(jī)被應(yīng)用到通信蔽塞的工廠(chǎng),另外還可外接喇叭自動(dòng)接聽(tīng)電話(huà),機(jī)器操作員不用停下手中的工作就可照指令進(jìn)行相應(yīng)的操作。另外,本系統(tǒng)應(yīng)用可拓展性好,如:系統(tǒng)可通過(guò)PCM通道進(jìn)行FXO連接從而實(shí)現(xiàn)與傳統(tǒng)PSTN互通(見(jiàn)圖1);在本系統(tǒng)上移植SIP協(xié)議棧便可實(shí)現(xiàn)與WIFI手機(jī)互通;將本系統(tǒng)整合到Ad Hoc網(wǎng)絡(luò)中,基于Ad Hoc網(wǎng)絡(luò)的各類(lèi)移動(dòng)終端設(shè)備便可應(yīng)運(yùn)而生,因此本系統(tǒng)具有廣闊的市場(chǎng)前景。
評(píng)論