IPServer的实现2-模拟交换机。

上次说服务器的实现。下面说下交换机的实现(有点多):

分析:服务器和交换机的通信是一对一的。而交换机接收到数据还要把数据转发给机顶盒。而交换机-->机顶盒是通过组播。

1、交换机接收服务器的实现:

UINT RecvSendSTB1(void *p)
{
struct sockaddr_in addr;
int MultSock;
CIPTVSwitchDlg
*pDlg=(CIPTVSwitchDlg*)p;
CString strIP;
CString m_strPort;
pDlg
->m_IPAddr1.GetWindowText(strIP);//从界面获取IP
pDlg
->m_PortEdit.GetWindowText(m_strPort);//从界面获取Port
pDlg
->m_Port=atoi(m_strPort);

CString strTemp;
unsigned
int IP_A;
strTemp
=strIP.Mid(0, strIP.Find('.',0));
IP_A
=atoi(strTemp);
if(IP_A<224 || IP_A>239 || pDlg->m_Port>65536)
{
AfxMessageBox(
"组播地址必须是224.0.0.0~239.255.255.254,而端口号必须是0~65535");
return -1;
}
else
{
/* create multicast UDP socket */
if ((MultSock=socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
AfxMessageBox(
"Error create Multisok");
}
}
/* 设置组播地址 */
memset(
&addr,0,sizeof(addr));
addr.sin_family
=AF_INET;
addr.sin_addr.s_addr
=inet_addr(strIP);
addr.sin_port
=htons(pDlg->m_Port);

SOCKET socket1;
SOCKADDR_IN local;
SOCKADDR_IN from;
char buffer[1024];
char temp[1024];
memset(buffer,
0,sizeof(buffer));
memset(temp,
0,sizeof(temp));
char* pBuffer;
pBuffer
=new char[4096];
pBuffer[
0]='\0';
char* pBuf=pBuffer;
long iTemp = 0;
CString tmpPort;

pDlg
->m_PortEdit4.GetWindowText(tmpPort);
pDlg
->m_Port4=atoi(tmpPort);
  
  //单播接收服务器数据sock
int fromlen =sizeof(SOCKADDR);
local.sin_family
=AF_INET; //地址族,常被赋为AF_INET
local.sin_port=htons(pDlg->m_Port4); //监听端口
local.sin_addr.s_addr=INADDR_ANY; //本机IP

int ret=0;
ret
=socket1=socket(AF_INET,SOCK_DGRAM,0);//数据报套接字
if(ret<0)
{
AfxMessageBox(
"socket创建失败");
}

//绑定套接字到一个IP地址和一个端口
if((bind(socket1,(SOCKADDR*)&local,sizeof(SOCKADDR))==SOCKET_ERROR))
{
AfxMessageBox(
"socket绑定失败");
}
//接收并组播发送数据
while(1)
{
int rev=0;
if((rev= recvfrom(socket1,buffer,sizeof(buffer),0,(SOCKADDR*)&from,&fromlen))<0)
{
AfxMessageBox(
"接收失败");
}

//组播发送
if (sendto(MultSock,buffer, rev, 0, (struct sockaddr *) &addr, sizeof(addr)) < 0)
{
AfxMessageBox(
"发送失败");
}
}                                                                            

posted on 2011-08-18 10:53  静幽独白  阅读(328)  评论(0编辑  收藏  举报

导航