发信人: tengel()
整理人: (2000-01-13 12:34:13), 站内信件
|
【 在 wfjlyy (小小靖) 的大作中提到: 】
广播首先要求必须是LAN,也就是适配器支持广播,所以对于PPP的连接
就不支持广播.对于支持广播的硬件.
如果你用的Windows可以采用Winsock API函数,或者MFC类CAysnSocket
或者 CSokcet(VC)C++Builder可以使用相应的VCL控件.
如果是Unix操作系统,BSDSocket是一个选择.
下面的代码是WinsockAPI写的可以很容易的移植到其他操作系统;
发送:
SOCKET sck=socket(AF_INET,SOCK_DGRAM,0);
if(sck==INVALID_SOCKET)
{
TRACE("Could not create a sock");
PostQuitMessage(0);
return 0;
}
struct sockaddr_in to;
to.sin_family=AF_INET;
to.sin_port=htons(nPort);
to.sin_addr.s_addr=INADDR_ANY;
BOOL optval;
setsockopt(sck,SOL_SOCKET,SO_REUSEADDR,(char FAR *)&optval,sizeof(opt val));
if(bind(sck,(struct sockaddr *)&to,sizeof(to))==SOCKET_ERROR)
{
TRACE("Could not bind");
closesocket(sck);
return 0;
}
if(setsockopt(sck,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof( optval)))
TRACE("Error in opt");
//SentTo Addr define
struct sockaddr_in tto;
tto.sin_family=AF_INET;
tto.sin_port=htons(nRecvPort);
tto.sin_addr.s_addr=INADDR_BROADCAST;
sendto(sck,(char FAR *)&msg,sizeof(msg),0,(struct sockaddr FA R*)&tto,sizeof(SOCKADDR));
}
接收与发送基本类似,只需要把nRecvPort Bind到Socket上,然后采用recvfrom
接收即可
-- 独进小楼成一统,管他冬夏与春秋
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.33.5]
|
|