天天看点

一个VC简单的UDP广播示例

接收端: #include<stdlib.h> //#include<iostream.h> #include <conio.h> #include <stdio.h> #include <winsock2.h> #include <windows.h> #pragma   comment   ( lib ,   "ws2_32.lib" ) void   main( void   ) {                 SOCKET s;                 sockaddr_in from,a;                 WSADATA wsdata;                 BOOL optval;                    //启?动??SOCKET库a,??版??本??为a2.0                 WSAStartup(0x0202,&wsdata);                 optval=TRUE;                    //然??后??赋3值??给?两??个?地??址??,??一??个?用??来???绑???定??套???接??字??,??一??个?用??来???从???网??络?上??的??广?播??地??址??接??收??消?息??;??                 a.sin_family=AF_INET;                 a.sin_addr.s_addr=0;                 a.sin_port=htons(5050);

                from.sin_family=AF_INET;                 from.sin_addr.s_addr=INADDR_BROADCAST;                 from.sin_port=htons(5050);                                     int   fromlength= sizeof   (SOCKADDR);                    //用??UDP初?始??化??套???接??字??                 s=socket(AF_INET,SOCK_DGRAM,0);                     //设???置?该?套???接??字??为a广?播??类???型??,??                 setsockopt(s,SOL_SOCKET,SO_BROADCAST,(   char   FAR *)&optval, sizeof   (optval));                 bind(s,(sockaddr *)&a,   sizeof (sockaddr_in));                    char   buf[256];                    while (1)                 {   //从???广?播??地??址??接??收??消?息??,??注???意?a用??来???绑???定??的??地??址??和??接??收??消?息??的??地??址??是??不?一??样??的??                                 recvfrom(s,buf,256,0,(   struct   sockaddr FAR *)&from,( int   FAR *)&fromlength);                                 Sleep(2000);                                 printf(   "%s\n" ,buf);                                 ZeroMemory(buf,256);                 } }

发送端: #include <stdlib.h> //#include<iostream.h> #include <stdio.h> #include <conio.h> #include <winsock2.h> #include <windows.h>

#pragma   comment   ( lib ,   "ws2_32.lib" ) int   main() {                 SOCKET s;                 sockaddr_in addrto;                 WSADATA wsdata;                 BOOL bsocket;                    char   *smsg= "this is a test wyj"   ;                    //启?动??SOCKET库a,??版??本??为a2.0                 WSAStartup(0x0202,&wsdata);                                  s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);                 bsocket=TRUE;                    //然??后??赋3值??给?地??址??,??用??来???从???网??络?上??的??广?播??地??址??接??收??消?息??;??                 addrto.sin_family=AF_INET;     addrto.sin_addr.s_addr=INADDR_BROADCAST;                 addrto.sin_port=htons(5050);                    bool   opt= true   ;                    //设???置?该?套???接??字??为a广?播??类???型??,??                 setsockopt(s,SOL_SOCKET,SO_BROADCAST,(   char   FAR *)&opt, sizeof   (opt));                    int   nlen= sizeof   (addrto);                    while (1)                 {                                 Sleep(1000);                                    //从???广?播??地??址??发???送??消?息??                                    int   ret=sendto(s,smsg,strlen(smsg),0,(sockaddr*)&addrto,nlen);                                    if (ret==SOCKET_ERROR)                                                 printf(   "Error:%s\n" , WSAGetLastError());                                    else                                 {                                                                               printf(   "ok" );                                           }                 }

                   return   -1; }

继续阅读