CSocket m;
BOOL  fBroadcast  =  TRUE;
m.SetSockOpt(SO_BROADCAST,(CHAR *)&fBroadcast,sizeof(BOOL),SOL_SOCKET);
m.Create(2330,SOCK_DGRAM);
m.SendTo( p,sizeof(yuan1),3550,"255.255.255.255");在我的程序中用上述代码,不能实现广播,请问是怎么回事?如何修改?不胜感激!

解决方案 »

  1.   

    //client代码:
    #include <afx.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdio.h>
    #pragma comment(lib, "WS2_32.lib")//常量定义
    #define BUFSIZE 1024
    #define TTL_VALUE 255
    #define TIME_OUT 2
    #define TEST_ADDR   "234.5.6.7"
    #define TEST_PORT 9200
    #define LOOPMAX 10000int main(int argc, char* argv[])
    {
    struct sockaddr_in stto;
    char achout[BUFSIZE];    //要发送的信息
    WSADATA stwsa;
    SOCKET s;
    int i, itmp, iret, addr_size;
    struct AlarmRecData{
            time_t  AlarmTime;       // 报警发生时间
        //    UINT VarID;         // 报警变量的ID
    UINT AlarmType;   // 1->AI;2->DI
    // UINT AlarmType_;   // HH,H,L,LL,OneToZero,ZeroToOne 对应1,2,3,4,5,6
            UINT AlarmID;         // 报警ID
        //    CString VarName;    // 报警变量名
            //CString AlarmInfo;  // 报警信息
            float CurValue;
    };
    AlarmRecData _SendData;
    _SendData.AlarmID = 2;
    _SendData.CurValue = 3.5;
    _SendData.AlarmType = 1;
    _SendData.AlarmTime = (CTime::GetCurrentTime()).GetTime();
    memcpy(achout,&_SendData,sizeof(AlarmRecData)); itmp = WSAStartup(MAKEWORD(2, 2), &stwsa);
    if (itmp)
    {
    printf("Call WSAStartup failed. Return value: %d\t\n", itmp);
    exit(1);
    }
    s = socket(AF_INET, SOCK_DGRAM, 0);
    if (s == INVALID_SOCKET)
    {
    printf("Call socket failed. Error number: %d\t\n", WSAGetLastError());
    exit(1);
    }
    //组播组的地址信息
    stto.sin_family = AF_INET;
    stto.sin_addr.s_addr = inet_addr(TEST_ADDR);
    stto.sin_port = htons(TEST_PORT);
    //开始发送并接收信息
    addr_size = sizeof(struct sockaddr_in);
    for (i = 0; i < LOOPMAX; i++)
    {
        printf("Input the message: ");
       // scanf("%s", achout);
        printf("Now sending to multicast group, address: %s\n", TEST_ADDR);
        iret = sendto(s, achout, sizeof(achout), 0, (struct sockaddr *)&stto, addr_size);
        if (iret == SOCKET_ERROR)
        {
        printf("Call sendto failed. Error number: %d\t\n", WSAGetLastError());
        exit(1);
        }
    }closesocket(s);
    WSACleanup();system("PAUSE");
    return 0;
    }
      

  2.   

    receive的代码在公司  明天给你贴
      

  3.   

    你忽略了一点,要发送广播包需要用 setsockopt 设置 SOL_SOCKET 的 SO_BROADCAST
      

  4.   

    参考:http://search.csdn.net/Expert/topic/1899/1899610.xml?temp=.1342127
      

  5.   

    在MSDN2001中有个示例程序(含源码):
    在搜索中键入 
    MsocUdp.exe 就找到了!