如何用VC实现接收广播数据包???
3x 问题点数:40、回复次数:5Top
1 楼dash()回复于 2002-03-23 20:52:35 得分 20
我做过广播程序,
客户端发消息,服务端收到消息后,显示消息,关机等
可以给你Top
2 楼Brierbird(荆棘鸟)回复于 2002-03-23 23:06:09 得分 0
谢谢。你是真正意思上的广播吗?还仅仅是一个TCP/UDP的模式???我需要的真正意义上的。
yxming@263.net
Top
3 楼ju_feng(NorthSky)回复于 2002-03-23 23:18:43 得分 0
老兄,真正意义上的广播是什么??难道不是udp/ip吗?Top
4 楼Brierbird(荆棘鸟)回复于 2002-03-24 22:37:45 得分 0
基础当然是UDP,我说的意思是现在有些人常把建立一个C/S结构的程序,然后,C/S之间通过UDP通讯,S可以同时向几个C发消息,其实是一个对所以Accept了的socket进行的一对一的通讯。这就不叫广播(QQ的所谓广播也只是这种意义上的广播),Winsock中的广播是只需要发送一次。在其中sendto时,发送地址必须指定为IDADDR_BROADCAST.Top
5 楼involute(哼哼唧唧)回复于 2002-03-24 23:01:09 得分 20
//接收
#include "stdafx.h"
#include <stdio.h>
#include <winsock.h>
#include <conio.h>
int main(int argc, char* argv[])
{
WSADATA wsaData; //指向WinSocket信息结构的指针
SOCKET sockListener;
SOCKADDR_IN sin,saClient;
char cRecvBuff[1024];
int nSize,nbSize;
int iAddrLen=sizeof(saClient);
if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)//进行WinSocket的初始化
{
printf("Can't initiates windows socket!Program stop.\n");//初始化失败返回-1
return -1;
}
sockListener=socket(AF_INET, SOCK_DGRAM,0);
sin.sin_family = AF_INET;
sin.sin_port = htons(7001);
sin.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind( sockListener, (SOCKADDR FAR *)&sin, sizeof(sin))!=0)
{
printf("Can't bind socket to local port!Program stop.\n");//初始化失败返回-1
return -1;
}
while(1)
{
nSize = sizeof ( SOCKADDR_IN );
if((nbSize=recvfrom (sockListener,cRecvBuff,1024,0,(SOCKADDR FAR *) &saClient,&nSize))==SOCKET_ERROR)
{
printf("Recive Error");
break;
}
cRecvBuff[nbSize] = '\0';
printf("%s\n",cRecvBuff);
}
getch();
return 0;
}
//发送
int main(int argc, char* argv[])
{
WSADATA wsaData; //指向WinSocket信息结构的指针
SOCKET sockListener;
SOCKADDR_IN sin,saUdpServ;
BOOL fBroadcast = TRUE;
char sendBuff[1024];
int nSize;
int ncount=0;
if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)//进行WinSocket的初始化
{
printf("Can't initiates windows socket!Program stop.\n");//初始化失败返回-1
return -1;
}
sockListener=socket(PF_INET,SOCK_DGRAM,0);
setsockopt ( sockListener,SOL_SOCKET,SO_BROADCAST,(CHAR *) &fBroadcast,sizeof ( BOOL ));
sin.sin_family = AF_INET;
sin.sin_port = htons(0);
sin.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind( sockListener, (SOCKADDR *)&sin, sizeof(sin))!=0)
{
printf("Can't bind socket to local port!Program stop.\n");//初始化失败返回-1
return -1;
}
saUdpServ.sin_family = AF_INET;
saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST );
saUdpServ.sin_port = htons (7001);
nSize = sizeof ( SOCKADDR_IN );
while(1)
{
sprintf(sendBuff,"Message %d",ncount++);
sendto ( sockListener,sendBuff,
lstrlen (sendBuff),
0,
(SOCKADDR *) &saUdpServ,
sizeof ( SOCKADDR_IN )
);
printf("%s\n",sendBuff);
}
return 0;
}
Top




