怎样发送广播消息

楼主nichang(nichang)2001-08-21 16:45:07 在 VC/MFC / 基础类 提问

使用CSocket类,比如发送一字符串"hello"  
  具体步骤应怎样,谢谢 问题点数:20、回复次数:8Top

1 楼xzou(亡狼补齿)回复于 2001-08-21 16:52:14 得分 10

用UDP包发送,使用sendto函数,参数const   struct   sockaddr   FAR   *   to,里写入广播地址.Top

2 楼nichang(nichang)回复于 2001-08-21 17:00:37 得分 0

该Scocket是否需要初始化呢Top

3 楼xzou(亡狼补齿)回复于 2001-08-21 17:19:19 得分 0

其他步骤相当于一个udp的发送,需要初始化WSAStartup(),sockst(),发送端sendto()....  
  接受端recvfrom().....Top

4 楼MicroAngel(Jacky)回复于 2001-08-21 17:31:29 得分 10

创建的socket应该具有SO_BROADCAST属性Top

5 楼nichang(nichang)回复于 2001-08-21 17:45:40 得分 0

我的代码是这样的。  
  Client端:  
  ServerSend.Create(4000,SOCK_DGRAM);  
  char   strText[20];  
  CString   strAllAddr="127.0.0.1";  
  strcpy(strText,"nichang");  
  ServerSend.SendTo(strText,strlen(strText),4000,strAllAddr);  
  Server端:  
  CSocket   ServerRec;  
  if(!ServerRec.Create(4000,SOCK_DGRAM,"127.0.0.1"))  
  {  
          MessageBox("error");  
          return;  
  }  
  char   strText[20];  
  CString   strAddr;  
  UINT   nPort;  
  ServerRec.ReceiveFrom(strText,20,strAddr,nPort);  
  MessageBox(strText);  
  我的服务端接受不到客户端的信息Top

6 楼nichang(nichang)回复于 2001-08-21 18:10:01 得分 0

谢谢,可以运行了,代码没有变,真奇怪Top

7 楼xwchena(阳光不锈)回复于 2001-08-21 19:00:41 得分 0

给你一段代码:  
          CString   message="just   a   test";  
          SOCKET   s=INVALID_SOCKET;  
          s=::socket(AF_INET,SOCK_DGRAM,0);  
          if(s==INVALID_SOCKET)  
          {  
              AfxMessageBox("建立广播SOCKET   失败!");  
              return   11015;  
          }  
   
          BOOL   boptval=TRUE;  
          if(setsockopt(s,SOL_SOCKET,SO_BROADCAST,   (const   char   *)&boptval,sizeof(boptval)))  
          {  
              AfxMessageBox("setsockopt   error   ");  
              ::closesocket(s);  
              return   11015;  
          }  
   
  //本地  
          sockaddr_in   addr;  
          memset(&addr,0,sizeof(sockaddr_in));  
          addr.sin_family   =   AF_INET;  
          addr.sin_addr.S_un.S_addr=INADDR_ANY;  
          addr.sin_port   =htons(3000);  
   
          //   绑定  
          int   err=bind(s,(sockaddr*)&addr,sizeof(sockaddr));  
          if(err!=0)  
              AfxMessageBox("绑定错误");  
   
  //目标  
          sockaddr_in   destaddr;  
          memset(&destaddr,0,sizeof(sockaddr_in));  
          destaddr.sin_family   =   AF_INET;  
          destaddr.sin_addr.S_un.S_addr=inet_addr("192.168.1.255");  
          destaddr.sin_port   =htons(5000);  
   
  err=sendto(s,(const   char*)&message,11,0,(sockaddr*)&destaddr,sizeof(destaddr));  
        if(err==SOCKET_ERROR)  
          {  
              AfxMessageBox("sendto   err");  
                  ::closesocket(s);  
                  return   11015;  
          }  
   
          ::closesocket(s);  
          return   11014;  
  Top

8 楼use_id(use_id)回复于 2001-08-24 19:42:21 得分 0

学习。Top

你可能对以下的问题也比较感兴趣....