精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 编程世界>>其他>>在INTRANET中如何用TCP/IP协议进行广播??

主题:在INTRANET中如何用TCP/IP协议进行广播??
发信人: 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]

[关闭][返回]