一个简单广播数据包代码

来源:互联网 发布:淘宝商城蕾丝打底衫 编辑:程序博客网 时间:2024/04/30 09:35

在IPV4中报文的传输分为三种方式:单播,广播,多播。

以下是一个简单的Demo


/*
*filename: recv.c 
*compile&link: gcc -o recv recv.c
*/

#include 
<stdio.h>
#include 
<sys/types.h>
#include 
<sys/socket.h>
#include 
<netinet/in.h>


int main(int argc , char* argv[] )
{
    
int fd;
    
int nread;
    
struct sockaddr_in addr;
    
char buf[128];

    fd 
= socket(PF_INET,SOCK_DGRAM,0);
    
if ( fd == -1 )
    
{
        perror(
"socket:");
        
return -1;
    }

        
    memset(
&addr,0,sizeof(struct sockaddr_in) );
    addr.sin_addr.s_addr 
= INADDR_ANY;
    addr.sin_port 
= htons(5000);
    addr.sin_family 
= AF_INET;

    bind(fd,(
struct sockaddr*)&addr,sizeof(struct sockaddr_in));

    
while ( 1 )
    
{
        memset(buf,
0,128);
        nread 
= recvfrom(fd,buf,128,0,NULL,NULL);
        
if ( nread == -1 )
        
{
            perror(
"recvfrom:");
            
break;
        }


        printf(
"received: %s",buf);
    }

    
    close(fd);
    
return 0;
}

 

 

 


/*
* filename : send.c
* compile&link : gcc -o send send.c
*/


#include 
<stdio.h>
#include 
<sys/types.h>
#include 
<sys/socket.h>
#include 
<netinet/in.h> //定义了INADDE_ANY,INADDR_BROADCAST等宏

int enable_broadcast(int fd,int benable)
{
    
int nresult = setsockopt(fd,SOL_SOCKET,SO_BROADCAST,(const
void*)&benable,(socklen_t)sizeof(int));

    
if ( nresult == -1 )
    
{
        perror(
"setsockopt:");
        
return -1;
    }

    
return 1;
}


int main( int argc , char* argv[] )
{
    
int fd;
    
struct sockaddr_in addr;
    
char* msg = "hello ";

    fd 
= socket(PF_INET,SOCK_DGRAM,0);
    
if ( fd == -1 )
    
{
        perror(
"socket:");
        
return -1;
    }


    enable_broadcast(fd,
1);
    
    memset(
&addr,0,sizeof(struct sockaddr_in));
    addr.sin_addr.s_addr 
= INADDR_BROADCAST;
    addr.sin_family 
= AF_INET;
    addr.sin_port 
= htons(5000);
    
    
if ( -1 == sendto(fd,msg,strlen(msg),0,(struct sockaddr*)&addr,sizeof(struct sockaddr_in)) )
    
{
        perror(
"sendto:");
        
return -1;
    }

    
return 0;
}

 

运行:

#  ./recv&

#./send

 

原创粉丝点击