新闻中心

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通话功能

评论


相关推荐

技术专区

关闭