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

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
//如果用户输入结束,程序就终止了 WaitForSingleObject(hHandle[0], INFINITE); WSACleanup(); return 0; } void do_send(void* arg) { SOCKET server = (SOCKET)arg; char sendline[BUFFER_SIZE+1]

  //如果用户输入结束,程序就终止了
  WaitForSingleObject(hHandle[0], INFINITE);

  WSACleanup();

  return 0;
  }

  void do_send(void* arg)
  {
  SOCKET server = (SOCKET)arg;

  char sendline[BUFFER_SIZE+1];

  sockaddr_in remote;
  memset(&remote, 0, sizeof(remote));
  remote.sin_addr.s_addr = inet_addr ( MULTICAST_IP );
  remote.sin_family = AF_INET ;
  remote.sin_port = htons(MULTICAST_PORT);

  for(;;) //读取用户输入知道用户输入"end"
  {
  cin.getline(sendline, BUFFER_SIZE);

  if(strncmp(sendline,"end",3)==0)
  break;

  //发送用户输入的数据到多播组
  sendto(server, sendline, strlen(sendline), 0, (sockaddr*)(&remote), sizeof(remote));
  }

  cout<<"do_send end..."<}

  void do_read(void* arg)
  {
  SOCKET server = (SOCKET)arg;

  char buf[BUFFER_SIZE+1];
  int ret;

  sockaddr_in client;
  int clientLen;

  for(;;) //一直读取知道主线程终止
  {
  clientLen = sizeof(client);
  memset(&client, 0, clientLen);

  ret = recvfrom(server, buf, BUFFER_SIZE, 0, (sockaddr*)(&clientLen), &clientLen);
  if ( ret == 0) //do_read在用户直接回车发送了一个空字符串
  {
  continue;
  }
  else if( ret == SOCKET_ERROR )
  {
  if( WSAGetLastError() == WSAEINTR ) //主线程终止recvfrom返回的错
  break;

  cout<<"Error in recvfrom: "< break ;
  }
  buf[ret] = '\0';
  cout<<"received: "< }

  cout<<"do_read end..."<}

  当然上面的代码如果应用到实际的程序中还需要作更多的工作,不过实现多播功能真的很简单,不是吗 :-)

  我只是刚刚才开始学习网络编程方面的东东,上面的代码如果你认为有什么问题,请直接发email给我。

精彩图集

赞助商链接