SOCKET实现广播(BoardCast)的发送和接收 (转)

SOCKET实现广播(BoardCast)的发送和接收 (转)[@more@]

这两天很多人在问怎么样用SOCKET实现广播(BoardCast)


正好我做过这方面的程序,这里用最简单的代码写一个广播发送和接受的例子:


//


//发送端程序


#include
#include


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_.NET,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("%sn",sendBuff);
  }
return 0;
}


 


/


//接收


 


#include
#include
#include


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] = '';
  printf("%sn",cRecvBuff);


  }
  return 0;
}


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992490/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-992490/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值