新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 無線VoIP系統IP通話功能實現

        無線VoIP系統IP通話功能實現

        作者: 時間:2012-03-01 來源:網絡 收藏
        體, arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; PADDING-TOP: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BACKGROUND-COLOR: rgb(255,255,255); orphans: 2; widows: 2; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">

          (1)雙方分別建立socket,調用socket函數:

          s=socket(PF_INET,SOCK_DGRAM,0)

          SOCK_DGRAM表示套接字類型為數據報套接字,即采用UDP協議進行通信。

          (2)綁定已設置好的自己的地址和端口信息,調用bind函數:

          bind(s,(struct sockaddr*)my_addr,sizeof(structsockaddr))

          (3)將select函數置于阻塞狀態,直到監視文件描述符集合rfds中某個文件描述符發生變化為止:

          select(pCtrl->rwd+1,rfds,IFX_NULL,IFX_NULL,NULL)

          (4)數據傳輸:sendto()和recvfrom()用于在無連接的數據報socket方式下進行數據傳輸。由于本地socket并沒有與遠端機器建立連接,所以在發送數據時應指明目的地址。如圖6所示,A作為發送方,通過其套接字用函數sendto()將其服務請求數據發送到接收方B的指定端口,B通過其套接字用函數recvfrom()接收數據,處理好服務請求后又將服務應答發回A,此時A便成了接收方,A接收應答后還可繼續發送數據給B。

        2.2 廣播通訊的實現

          廣播和多播都用于實現向多個接收者發送UDP數據報,但是廣播不像多播那樣在接收端有復雜的控制過程,因而實現比多播簡單的多。以下廣播通訊的實現均在點對點通訊的基礎上實現的。

          在發送方,只需要設置套接字socket的選項為允許發送廣播,然后在發送時指定目的IP為廣播地址即可。具體地,允許socket廣播通過setsockopt函數設置廣播選項來實現,當setsockopt參數optname為SO_BROADCAST時,表示打開或禁止從該socket廣播,當參數optval為1時允許廣播,為0時禁止廣播。

          系統編程實現廣播的部分源碼為:

          int bBroadcast=1:

          setsockopt(pCtrl-->nAdminSocket,SOL_SOCKET,SO_BROADCAST,bBroadcast,sizeof(bBroadcast));

          setsockopt(pConn-->nUsedSocket,SOL_SOCKET,SO_BROADCAST,bBroadcast,sizeof(bBroadcast));

          tO_addr.sin_addr.s_addr=inet_addr(WIRLESS_IP_BROADCAST);

          /*WIRLESS_IP_BROADCAST為廣播地址,其值是將網絡接口(本系統為ath0)IP地址的主機ID部分設置為全1,網絡ID部分不變而得到*/



        關鍵詞: 無線 VoIP系統 IP通話 功能

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 称多县| 德令哈市| 杨浦区| 新建县| 山东省| 宜兰市| 麟游县| 沭阳县| 泰和县| 新昌县| 连城县| 玉环县| 城口县| 垦利县| 和龙市| 广东省| 杭州市| 秦皇岛市| 襄汾县| 瑞金市| 高平市| 乡城县| 鄱阳县| 城固县| 叙永县| 永修县| 水城县| 常山县| 金阳县| 乌什县| 怀远县| 汶川县| 大荔县| 泰和县| 双峰县| 开江县| 弥勒县| 留坝县| 独山县| 富宁县| 广州市|