UDP协议实现广播

    技术2022-05-11  119

    发送端:server.cpp

    #include <winsock2.h>#include <stdlib.h>#include <stdio.h>#include "head.h"int main(){    WSADATA wsaData;          //指向WinSocket信息结构的指针    SOCKET sockListener;    SOCKADDR_IN sin,saUdpServ;    BOOL fBroadcast = TRUE;    //char sendBuff[1024];    int nSize;    int ncount=0;    if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)//进行WinSocket的初始化    {        printf("Cant initiates windows socket!Program stop./n");        return -1;    }    sockListener=socket(PF_INET,SOCK_DGRAM,0);    setsockopt ( sockListener,SOL_SOCKET,SO_BROADCAST, (CHAR *)&fBroadcast,sizeof ( BOOL ));    sin.sin_family = AF_INET;    sin.sin_port = htons(0);    sin.sin_addr.s_addr = htonl(INADDR_ANY);    if(bind( sockListener, (SOCKADDR *)&sin, sizeof(sin))!=0)    {        printf("Cant bind socket to local port!Program stop./n");//初始化失败返回-1        return -1;    }    saUdpServ.sin_family = AF_INET;    saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST );    saUdpServ.sin_port = htons (7001);//发送用的端口,可以根据需要更改    nSize = sizeof ( SOCKADDR_IN ); struct msg m_msg; m_msg.MsgID = ID_DETECTION;    while(1)    {        //sprintf(sendBuff,"Message %d",ncount++);        sendto ( sockListener,(char*)&m_msg, sizeof(m_msg),0,(SOCKADDR *) &saUdpServ,sizeof ( SOCKADDR_IN ));        printf("ii");    } return 0;}

    接收端:client.cpp

    #include <winsock2.h>#include <stdlib.h>#include <stdio.h>#include <conio.h>#include "head.h"int main(int argc, char* argv[]){    WSADATA wsaData;          //指向WinSocket信息结构的指针    SOCKET sockListener;    SOCKADDR_IN sin,saClient;    //char cRecvBuff[1024]; struct msg m_msg;    int nSize,nbSize;    int iAddrLen=sizeof(saClient);    if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)//进行WinSocket的初始化    {        printf("Cant initiates windows socket!Program stop./n");//初始化失败返回-1        return -1;    }    sockListener=socket(AF_INET, SOCK_DGRAM,0);    sin.sin_family = AF_INET;    sin.sin_port = htons(PORT);//发送端使用的发送端口,可以根据需要更改    sin.sin_addr.s_addr = htonl(INADDR_ANY);    if(bind( sockListener, (SOCKADDR FAR *)&sin, sizeof(sin))!=0)    {        printf("Cant bind socket to local port!Program stop./n");//初始化失败返回-1        return -1;    }    while(1)    {        nSize = sizeof ( SOCKADDR_IN );        if((nbSize=recvfrom (sockListener,(char*)&m_msg,sizeof(m_msg),0,(SOCKADDR FAR *) &saClient,&nSize))==SOCKET_ERROR)        {            printf("Recive Error");            break;        }        if(m_msg.MsgID == ID_DETECTION)    {     printf("received detect/n");     m_msg.MsgID = ID_DETECTIONOK;     sendto ( sockListener,(char*)&m_msg, sizeof(m_msg),0,(SOCKADDR *) &saClient,sizeof ( SOCKADDR_IN ));    }    }    return 0;}

    头文件:head.cpp

    #define ID_LOGIN       3000#define ID_LOGINOK     3001#define ID_LOGINFAIL   3002#define ID_BEGINRTP    3003#define ID_ENDRTP      3004

    #define ID_DETECTION   4000#define ID_DETECTIONOK 4001#define PORT 40000struct msg{   int MsgID;   char UserID[20];   char Pwd[20];};


    最新回复(0)