TDBOOL CSoundControlDlg::STBCreatUDPSocket()
{
#define BUFLEN 128
struct sockaddr_in myaddr;
char recmsg[BUFLEN + 1];
unsigned int socklen; char strBroadIP[16];
char strTmpIP[16];
char* pDest;
int i = 0;
if(pthreadGetCommd == 1)
{
TDDebug("closesocket\n");
closesocket(hUDPCmdSocket);
}
memset(strBroadIP,0,strlen(strBroadIP));
strcpy(strBroadIP,m_szRoomIP);
for(i = 0; i < 3; i ++)
{
pDest = strstr(strBroadIP,".");
strcpy(strBroadIP,strBroadIP + (pDest - strBroadIP) + 1);
}
sprintf(strTmpIP,"232.0.0.%s",strBroadIP);
TDDebug(strTmpIP);
sprintf(strTmpIP,"232.0.0.185"); hUDPCmdSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (hUDPCmdSocket < 0)
{
TDDebug("socket creating error\n");
exit(1);
}
socklen = sizeof(struct sockaddr_in); memset(&mUDPCmdAddr, 0, socklen);
mUDPCmdAddr.sin_family = AF_INET;
mUDPCmdAddr.sin_port = htons(2008);
if (inet_pton(AF_INET, strTmpIP, &mUDPCmdAddr.sin_addr) <= 0)
{
TDDebug("wrong group address!\n");
exit(0);
}
memset(&myaddr, 0, socklen);
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(2009);
if (inet_pton(AF_INET, m_szMyIP, &myaddr.sin_addr) <= 0)
{
TDDebug("self ip address error!\n");
exit(0);
}
if (bind(hUDPCmdSocket, (struct sockaddr *) &myaddr,
sizeof(struct sockaddr_in)) == -1)
{
TDDebug("Bind error\n");
exit(0);
}
TDDebug("create socket ok \n");
}
{
#define BUFLEN 128
struct sockaddr_in myaddr;
char recmsg[BUFLEN + 1];
unsigned int socklen; char strBroadIP[16];
char strTmpIP[16];
char* pDest;
int i = 0;
if(pthreadGetCommd == 1)
{
TDDebug("closesocket\n");
closesocket(hUDPCmdSocket);
}
memset(strBroadIP,0,strlen(strBroadIP));
strcpy(strBroadIP,m_szRoomIP);
for(i = 0; i < 3; i ++)
{
pDest = strstr(strBroadIP,".");
strcpy(strBroadIP,strBroadIP + (pDest - strBroadIP) + 1);
}
sprintf(strTmpIP,"232.0.0.%s",strBroadIP);
TDDebug(strTmpIP);
sprintf(strTmpIP,"232.0.0.185"); hUDPCmdSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (hUDPCmdSocket < 0)
{
TDDebug("socket creating error\n");
exit(1);
}
socklen = sizeof(struct sockaddr_in); memset(&mUDPCmdAddr, 0, socklen);
mUDPCmdAddr.sin_family = AF_INET;
mUDPCmdAddr.sin_port = htons(2008);
if (inet_pton(AF_INET, strTmpIP, &mUDPCmdAddr.sin_addr) <= 0)
{
TDDebug("wrong group address!\n");
exit(0);
}
memset(&myaddr, 0, socklen);
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(2009);
if (inet_pton(AF_INET, m_szMyIP, &myaddr.sin_addr) <= 0)
{
TDDebug("self ip address error!\n");
exit(0);
}
if (bind(hUDPCmdSocket, (struct sockaddr *) &myaddr,
sizeof(struct sockaddr_in)) == -1)
{
TDDebug("Bind error\n");
exit(0);
}
TDDebug("create socket ok \n");
}
{
#define BUFLEN 128
struct sockaddr_in myaddr;
char recmsg[BUFLEN + 1];
unsigned int socklen; char strBroadIP[16];
char strTmpIP[16];
char* pDest;
int i = 0;
//这个变量从哪里来的,没找打声明的地方
if(pthreadGetCommd == 1)
{
TDDebug("closesocket\n");
closesocket(hUDPCmdSocket);
}
memset(strBroadIP,0,strlen(strBroadIP)); //初始化
strcpy(strBroadIP,m_szRoomIP); //取ip
for(i = 0; i < 3; i ++)
{
pDest = strstr(strBroadIP,".");
strcpy(strBroadIP,strBroadIP + (pDest - strBroadIP) + 1);
}
sprintf(strTmpIP,"232.0.0.%s",strBroadIP);
TDDebug(strTmpIP);
sprintf(strTmpIP,"232.0.0.185"); hUDPCmdSocket = socket(AF_INET, SOCK_DGRAM, 0); //创建socket
if (hUDPCmdSocket < 0)
{
TDDebug("socket creating error\n");
exit(1);
}
socklen = sizeof(struct sockaddr_in); memset(&mUDPCmdAddr, 0, socklen);
mUDPCmdAddr.sin_family = AF_INET;
mUDPCmdAddr.sin_port = htons(2008);
if (inet_pton(AF_INET, strTmpIP, &mUDPCmdAddr.sin_addr) <= 0)
{
TDDebug("wrong group address!\n");
exit(0);
}
memset(&myaddr, 0, socklen);
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(2009);
if (inet_pton(AF_INET, m_szMyIP, &myaddr.sin_addr) <= 0)
{
TDDebug("self ip address error!\n");
exit(0);
}
if (bind(hUDPCmdSocket, (struct sockaddr *) &myaddr, //绑定
sizeof(struct sockaddr_in)) == -1)
{
TDDebug("Bind error\n");
exit(0);
}
TDDebug("create socket ok \n");
}
{
#define BUFLEN 128
struct sockaddr_in myaddr;
char recmsg[BUFLEN + 1];
unsigned int socklen;
char strBroadIP[16];
char strTmpIP[16];
char* pDest;
int i = 0;
if(pthreadGetCommd == 1)
{
TDDebug("closesocket\n");
closesocket(hUDPCmdSocket);
}
//取得IP地址
memset(strBroadIP,0,strlen(strBroadIP));
strcpy(strBroadIP,m_szRoomIP);
for(i = 0; i < 3; i ++)
{
pDest = strstr(strBroadIP,".");
strcpy(strBroadIP,strBroadIP + (pDest - strBroadIP) + 1);
}
sprintf(strTmpIP,"232.0.0.%s",strBroadIP);
TDDebug(strTmpIP);
//ip地址是232.0.0.185,上面的ip没有用啊?
sprintf(strTmpIP,"232.0.0.185");
//创建socket
hUDPCmdSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (hUDPCmdSocket < 0)
{
TDDebug("socket creating error\n");
exit(1);
}
socklen = sizeof(struct sockaddr_in);
//设置端口,ip等
memset(&mUDPCmdAddr, 0, socklen);
mUDPCmdAddr.sin_family = AF_INET;
mUDPCmdAddr.sin_port = htons(2008);
//转换为网络字节序
if (inet_pton(AF_INET, strTmpIP, &mUDPCmdAddr.sin_addr) <= 0)
{
TDDebug("wrong group address!\n");
exit(0);
} //****上面的这个地址没用到啊?
memset(&myaddr, 0, socklen);
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(2009);
if (inet_pton(AF_INET, m_szMyIP, &myaddr.sin_addr) <= 0)
{
TDDebug("self ip address error!\n");
exit(0);
}
//将hUDPCmdSocket绑定到m_szMyIP的2009端口
if (bind(hUDPCmdSocket, (struct sockaddr *) &myaddr,
sizeof(struct sockaddr_in)) == -1)
{
TDDebug("Bind error\n");
exit(0);
}
TDDebug("create socket ok \n");
}
至于能不能收到,就不是udp的问题了!
你只是吧一个socket绑定到你自己的2009端口上了
如果别的机器,通过2009端口,给你发送消息,你可以用这个socket接受信息。
是说这个是对方的IP么??????
对于udp的客户端、服务器来说,socket的使用,非常简单!这是孙鑫笔记上的udp套接字使用的说明:
UDP型套接字。
服务器端(接收端)程序:
1、创建套接字(socket)。
2、将套接字绑定到一个本地地址和端口上(bind)。
3、等待接收数据(recvfrom)。
4、关闭套接字。
客户端(发送端)程序:
1、创建套接字(socket)。
2、向服务器发送数据(sendto)。
3、关闭套接字。你上面的这段代码,只是将一个socket绑定到了2009端口上!
既不能发数据,也不能接受数据!
只是创建了一个socket,并把它绑定到一个端口上,在什么也没有了!
BOOL CSoundControlDlg::STBSendInfo(int nCmdType, int nCmdParam)
{
char cmdbuf[2048] = "";
TDCHAR szMediaName[64];
TDCHAR szActorName[16];
TDDWORD dwMediaID = -1;
BYTE btMediaType = 0;
int btMediaGroup;
char szRingID[28];
int process = 0;
switch(nCmdType)
{
case PLAYPERCENT:
if(nCmdParam < 100)
{
sprintf(cmdbuf,"%2d:PERCENT:%d",nCmdType,nCmdParam);
myprintf("cmdBuf = %s\n",cmdbuf);
STBSendUDPMsg(cmdbuf);
}
break;
case NEXT:
sprintf(cmdbuf,"%2d: ClientID:%d",NEXT,0);
STBSendUDPMsg(cmdbuf);
break;
case PAUSEPLAY:
sprintf(cmdbuf,"%2d: ClientID:%d",PAUSEPLAY,0);
STBSendUDPMsg(cmdbuf);
break;
case MUTESOUND:
sprintf(cmdbuf,"%2d:ClientID:%d",MUTESOUND,0);
STBSendUDPMsg(cmdbuf);
break;
case REPLAY:
sprintf(cmdbuf,"%2d:ClientID:%d",REPLAY,0);
STBSendUDPMsg(cmdbuf);
break;
case YUANBANDAO:
sprintf(cmdbuf,"%2d:ClientID:%d",YUANBANDAO,0);
STBSendUDPMsg(cmdbuf);
break;
case MODIFYVOL:
sprintf(cmdbuf,"%2d:ModfiyType:%d ClientID:%d",MODIFYVOL,nCmdParam,0);
STBSendUDPMsg(cmdbuf);
break;
case MODIFYMIC:
sprintf(cmdbuf,"%2d:ModfiyType:%d ClientID:%d",MODIFYMIC,nCmdParam,0);
STBSendUDPMsg(cmdbuf);
break;
case MODIFYTONE:
sprintf(cmdbuf,"%2d:ToneType:%d ClientID:%d",MODIFYTONE,nCmdParam,0);
STBSendUDPMsg(cmdbuf);
break;
case GETSONGLIST:
sprintf(cmdbuf,"%2d: ClientID:%d",GETSONGLIST,nCmdParam,0);
STBSendUDPMsg(cmdbuf);
break;
case GETCURSONG:
break;
case CALLSERVICE:
{//参数nCallType 呼叫格式 1常规呼叫 2保洁 3音控 4服务 5经理
sprintf(cmdbuf,"%2d:CallType:%d ClientID:%d",CALLSERVICE,nCmdParam,0);
STBSendUDPMsg(cmdbuf);
}
break;
case HUNYIN:
sprintf(cmdbuf,"%2d:HunYinType:%d ClientID:%d",HUNYIN,nCmdParam,0);
STBSendUDPMsg(cmdbuf);
break;
case XIAOGUO:
sprintf(cmdbuf,"%2d:XiaoGuoType:%d ClientID:%d",XIAOGUO,nCmdParam,0);
STBSendUDPMsg(cmdbuf);
break;
case BROADCAST:
sprintf(cmdbuf,"%2d:BroadCast:%d ClientID:%d",BROADCAST,nCmdParam,0);
STBSendUDPMsg(cmdbuf);
break;
case RECORD:
sprintf(cmdbuf,"%2d:Record:%d ClientID:%d",RECORD,nCmdParam,0);
// printf(cmdbuf);
// printf("\n");
STBSendUDPMsg(cmdbuf);
break;
case CLOSEROOMCMD:
sprintf(cmdbuf,"%2d:ClientID:%d",nCmdType,0);
// STBSendUDPMsg(cmdbuf);
STBSendUDPMsg(cmdbuf); //msl
break;
}
myprintf("cmd = %s\r\n",cmdbuf);
}
STBSendUDPMsg(char *service)
{
TDDebug("send to stb begin\r\n"); //add by jzn, for test
if(sendto(hUDPCmdSocket, service, strlen(service)+1, 0, (struct sockaddr *)&mUDPCmdAddr, sizeof(struct sockaddr_in)) < 0)
{
// TDDebug("Send service's data error...\n");
// TDDebug("Send service's data error...\n");
MessageBox("Send service's data error...","错误",MB_ICONERROR);
}
// TDDebug("send to stb end\r\n"); //add by jzn, for test
MessageBox("send to stb end","错误",MB_ICONERROR); return TRUE;}
转换网络字节序是用 INADDR_BROADCAST就可以了!
TDBOOL CSoundControlDlg::STBCreatUDPSocket()
我要在这个函数里带上我要绑定的客户端IP当参数。在主函数里找到我自己的IP,已实现初始化吧。