发信人: 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]
  | 
 
 
 |