龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

读书笔记:在局域网中实现多播功能(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
cout"Error in setsockopt(SO_REUSEADDR): " return 0; } const int routenum = 10; ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_TTL, (char*)routenum,sizeof(routenum)); if( ret == SOCKET_ERROR ) { WSACl

  cout<<"Error in setsockopt(SO_REUSEADDR): "< return 0;
  }

  const int routenum = 10;
  ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_TTL,
  (char*)&routenum,sizeof(routenum));
  if( ret == SOCKET_ERROR )
  {
  WSACleanup();
  cout<<"Error in setsockopt(IP_MULTICAST_TTL): "< return 0;
  }

  const int loopback = 0; //禁止回馈
  ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_LOOP,
  (char*)&loopback,sizeof(loopback));
  if( ret == SOCKET_ERROR )
  {
  WSACleanup();

  cout<<"Error in setsockopt(IP_MULTICAST_LOOP): "< return 0;
  }

  sockaddr_in local;
  memset(&local, 0, sizeof(local));
  local.sin_family = AF_INET;
  local.sin_port = htons(MULTICAST_PORT);
  local.sin_addr.S_un.S_addr = INADDR_ANY;

  ret = bind(server, (sockaddr*)(&local), sizeof(local));
  if( ret == SOCKET_ERROR )
  {
  WSACleanup();

  cout<<"Error in bind: "< return 0;
  }

  ip_mreq mreq;
  memset(&mreq, 0, sizeof(mreq));
  mreq.imr_interface.S_un.S_addr = INADDR_ANY;
  mreq.imr_multiaddr.S_un.S_addr = inet_addr(MULTICAST_IP);

  //加入一个多播组
  ret = setsockopt(server,IPPROTO_IP,IP_ADD_MEMBERSHIP,
  (char*)&mreq,sizeof(mreq));
  if( ret == SOCKET_ERROR )
  {
  WSACleanup();
  cout<<"Error in setsockopt(IP_ADD_MEMBERSHIP): "< return 0;
  }

  //创建了两个线程,一个读用户输入并发送,一个读多播组数据
  HANDLE hHandle[2];
  hHandle[0] = (HANDLE)_beginthread(do_send,0,(void*)server);
  hHandle[1] = (HANDLE)_beginthread(do_read,0,(void*)server);

精彩图集

赞助商链接