linux下使用UDP发送接收数据

//接收
static int sock_fd;
struct sockaddr_in recv_addr; //读取参数
struct sockaddr_in send_addr; //发送参数
sock_fd = socket(AF_INET, SOCK_DGRAM, 0);//申请一个读取网络套节字ID

    if (sock_fd == -1) {

        perror("socket");

        return false;

    }  

    // initialize address.

    bzero(&recv_addr, sizeof(recv_addr));

    recv_addr.sin_family = AF_INET;

    recv_addr.sin_port = htons(3000);//接收3000端口数据

    recv_addr.sin_addr.s_addr = htonl(INADDR_ANY);//监控IP地址

    // bind the local port.

    if ((bind(sock_fd, (struct sockaddr *)&recv_addr,sizeof(struct sockaddr_in))) == -1)         
   {
        perror("bind");
        return false;
    }
    return true;

     char recv_buf[BUFFER_SIZE];//读取缓存申请

        bzero(recv_buf, sizeof(recv_buf));
        //等待接收函数
        if ((recvfrom(sock_fd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr *)&send_addr, &sizeof(struct sockaddr_in))) <= 0) {

            perror("recvfrom");            

        }   
//发送
    struct sockaddr_in client_addr;
    static int  sock_fd1 = socket(AF_INET, SOCK_DGRAM, 0);//申请发送套节字

    client_addr.sin_port=htons(3001);//发送端口

    client_addr.sin_family=AF_INET;

    int flag = 1;  

    char send_buf[BUFFER_SIZE];//发送缓存申请

    bzero(send_buf, sizeof(send_buf));

    send_buf[0]=0x30;

    char *client_addrIP="192.168.2.255";//广播地址

    inet_pton(AF_INET,client_addrIP,&client_addr.sin_addr); 
    //inet_aton(client_addr,&client_addr.sin_addr);
    setsockopt(sock_fd1,SOL_SOCKET,SO_BROADCAST ,&flag,sizeof(flag));//配置广播参数,不然发不了

    

    //间隔10ms发送100字节数据

    while (1) { 
        if ((sendto(sock_fd1, send_buf, 100, 0,

                        (struct sockaddr *)&client_addr,

                        sizeof(struct sockaddr_in))) < 0) {

            perror("sendto");

            return (void*)-1;

        }

        send_buf[1]++;

        usleep(10000);//休眠10ms

    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值