新闻中心

EEPW首页>手机与无线通信>设计应用> 基于ADM5120的无线VoIP系统设计

基于ADM5120的无线VoIP系统设计

作者: 时间:2010-03-29 来源:网络 收藏

(1)双方分别建立socket,调用socket函数:
s=socket(PF_INET,SOCK_DGRAM,O)
SOCK DGRAM表示套接字类型为数据报套接字,即采用UDP协议进行通信。
(2)绑定已设置好的自己的地址和端口信息,调用bind函数:
bind(s,(struct sockaddr*)my_addr,sizeof(struct sockaddr))
(3)将select函数置于阻塞状态,直到监视文件描述符集合rfds中某个文件描述符发生变化为止:
select(pCtrI一>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时禁止广播。
编程实现广播的部分源码为:

本文引用地址://m.amcfsurvey.com/article/157548.htm

/*WIRLESS_IP_BROADCAST为广播地址,其值是将网络接口(本为athO)IP地址的主机ID部分设置为全1,网络ID部分不变而得到*/
to_addr.sin_family=AF_INET;
据文献所讲,在接收方,一般不需做任何改动即可收到广播。但在本实现的实验过程中,当将socket绑定到非INADDR ANY的IP地址时,接收方无法收到广播,并且没有任何错误指示,即需要绑定本地端口地址到通配地址INADDR ANY才可接收广播:
my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
另外,本系统还实现了广播强插功能,即不管用户当前处于摘机、拨号状态,还是处于通话状态,当有广播来电时,都断开原来的连接而与广播主叫建立新的连接(用户不用挂机)。为了防止通话混乱,本系统设定同一时刻只有拥有广播控制权的用户有发言权,而其他用户能听不能说,当其他用户想发言时,只要按下“*”键就抢到了广播控制权,最后只有当拥有广播控制权的用户挂机时,广播才停止,而任一其他用户挂机,不影响广播通讯继续进行。
系统编程实现广播强插的部分源码见表1和表2。

3 结语
该系统完成后,成功地应用于常德市某一电厂,进行生产调度,系统能实现点对点通讯和广播通讯,并且通话质量良好,基本无杂音和抖动。
本系统因自带网卡可以自组织网络,它可以作为一种指令调度机被应用到通信蔽塞的工厂,另外还可外接喇叭自动接听电话,机器操作员不用停下手中的工作就可照指令进行相应的操作。另外,本系统应用可拓展性好,如:系统可通过PCM通道进行FXO连接从而实现与传统PSTN互通(见图1);在本系统上移植SIP协议栈便可实现与WIFI手机互通;将本系统整合到Ad Hoc网络中,Ad Hoc网络的各类移动终端设备便可应运而生,因此本系统具有广阔的市场前景。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭