给点代码 :)

解决方案 »

  1.   

    // Module: bcast.c
    //
    // Description:
    //    This sample illustrates how to send and receive
    //    broadcast data. The SO_BROADCASt option only needs
    //    to be set on the sending socket; however in reality,
    //    the Microsoft provider's don't check to see if the 
    //    option is set. In other words you could send data
    //    to INADDR_BROADCAST without the option set and
    //    no error would occur.  Of course, this could change
    //    in the future!
    //
    // Compile:
    //    cl bcast.c ws2_32.lib
    //
    // Command Line Arguments/Parameters
    //    bcast.exe s|r
    //      s      Send broadcast data
    //      r      Receive data
    //
    #include <winsock2.h>
    #include <ws2tcpip.h>#include <stdio.h>
    #include <stdlib.h>//
    // Function: main
    //
    // Description:
    //    The main function does everything: loads the Winsock library,
    //    parses the arguments, sets the broadcast option, and either
    //    sends or receives data depending on the command line options.
    //
    int main(int argc, char **argv)
    {
        WSADATA       wsd;
        SOCKET        s;
        SOCKADDR_IN   to;    int           ret,
                      fromsz;
        BOOL          bOpt,
                      bSender;
        char         *msg="This is a test",
                      rcvbuf[1024];    // Check for arguments
        //
        if (argc != 2)
        {
            printf("usage: %s s|r\n", argv[0]);
            printf("    s  =  send\n");
            printf("    r  =  receive\n");
            return -1;
        }
        if (tolower(argv[1][0]) == 's')
            bSender = TRUE;
        else
            bSender = FALSE;
        //
        // Load Winsock
        //
        if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
        {
            printf("WSAStartup() failed: %d\n", GetLastError());
            return -1;
        }
        // Create a UDP socket
        //
        s = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0,
                WSA_FLAG_OVERLAPPED);
        if (s == INVALID_SOCKET)
        {
            printf("WSASocket() failed: %d\n", WSAGetLastError());
            return -1;
        }
        // Set the broadcast option (really only necessary for the 
        // sender.
        //
        bOpt = TRUE;
        ret = setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&bOpt,
                sizeof(bOpt));
        if (ret == SOCKET_ERROR)
        {
            printf("setsockopt(SO_BROADCAST) failed: %d\n",
                WSAGetLastError());
            return -1;
        }    if (bSender)
        {
            // Send some data
            //
            to.sin_family = AF_INET;
            to.sin_addr.s_addr = htonl(INADDR_BROADCAST);
            to.sin_port = htons(5150);        ret = sendto(s, msg, strlen(msg), 0, (SOCKADDR *)&to, sizeof(to));
            if (ret == SOCKET_ERROR)
            {
                printf("sendto() failed: %d\n", WSAGetLastError());
                return -1;
            }
        }
        else
        {
            // Receive data so we must bind first
            //
            to.sin_family = AF_INET;
            to.sin_addr.s_addr = htonl(INADDR_ANY);
            to.sin_port = htons(5150);
            
            ret = bind(s, (SOCKADDR *)&to, sizeof(to));
            if (ret == SOCKET_ERROR)
            {
                printf("bind() failed: %d\n", WSAGetLastError());
                return -1;
            }
            // Now we can read data
            //
            fromsz = sizeof(to);
            ret = recvfrom(s, rcvbuf, 1024, 0, (SOCKADDR *)&to, &fromsz);
            if (ret == SOCKET_ERROR)
            {
                printf("recvfrom() failed: %d\n", WSAGetLastError());
                return -1;
            }
            rcvbuf[ret] = 0;
            printf("Read: '%s' from %s\n", rcvbuf, inet_ntoa(to.sin_addr));
        }
        closesocket(s);    WSACleanup();
        return 0;
    }
      

  2.   

    太长了吧,我想要用CSocket写的代码
      

  3.   

    http://www.vckbase.com/code/downcode.asp?id=430