2.14作业

1,组播搭建

a),接收方

#include"header.h"

#define  GRP_SPORT 2021 
#define  GRP_IP "229.1.3.4"


int main(int argc, const char *argv[])
{
    
    int sfd;
    char buf[128]="";
    ssize_t res=0;
    //创建报式套接字
    sfd=socket(AF_INET,SOCK_DGRAM,0);
    if(res<0)
    {
        PRINTF_ERR("socket");
        return -1;
    }
    //端口快速重用
    int reuse=1;                                                          
    if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
    {
        PRINTF_ERR("setsockopt");
        return -1;
    }
    struct sockaddr_in cin;
    cin.sin_family=AF_INET;
    cin.sin_port  =htons(GRP_SPORT); 
    cin.sin_addr.s_addr=inet_addr(GRP_IP);
    socklen_t  addrlen=sizeof(cin);
    //绑定ip地址和端口
    if(bind(sfd,(struct sockaddr *)&cin, addrlen)<0)
    {
        PRINTF_ERR("bind");
        return -1;
    }
    //加入多播组
    struct ip_mreqn  mq;
    mq.imr_multiaddr.s_addr=inet_addr(GRP_IP);
    mq.imr_address.s_addr=inet_addr("192.168.8.156");
    mq.imr_ifindex=0;
    if(setsockopt(sfd, IPPROTO_IP , IP_ADD_MEMBERSHIP, &mq, sizeof(mq))<0)
    {
        PRINTF_ERR("setsockopt");
        return -1;
    }
    while(1)
    {    
        //接收数据                                                      
        bzero(buf,sizeof(buf));
        res=recvfrom(sfd,buf , sizeof(buf), 0, (struct sockaddr *)&cin, &addrlen);
        if(res<0)
        {
            PRINTF_ERR("recvform");
            return -1;
        }
        printf("[%s|%d]\t%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
    }
        //关闭套接字
    close(sfd);

    return 0;
}

b),发送方

#include"header.h"

#define GRP_IP "229.1.3.4"
#define  GRP_SPORT 2021 


int main(int argc, const char *argv[])
{
    int sfd=0;
    char buf[128]="";

    //创建套接字
    sfd= socket(AF_INET ,SOCK_DGRAM ,0);
    if(sfd<0)
    {
        PRINTF_ERR("socket");
        return -1;
    }
    int reuse=1;
    if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
    {
        PRINTF_ERR("setsockopt");
        return -1;
    }
    //填写接收方的ip地址和端口号
    struct sockaddr_in sin;
    sin.sin_family=AF_INET;
    sin.sin_port  =htons(GRP_SPORT);         //接收方端口号
    sin.sin_addr.s_addr=inet_addr(GRP_IP);   //组播ip地址与接收方一致
    ssize_t res;
    
    //发送数据
    while(1)
    {
        printf("请输入要发送的内容>>>\n");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]=0;
        res= sendto(sfd, buf, sizeof(buf), 0,(struct sockaddr *)&sin, sizeof(sin));
        if(res<0)
        {
            PRINTF_ERR("sendto");
            return -1;;
        }
        printf("发送成功!\n");
    }

    //关闭套接字
    close(sfd);  
    return 0;
}
  1. 广播搭建

a),接收方

#include"header.h"

#define  SPORT 2009 
#define  IP "192.168.8.255"


int main(int argc, const char *argv[])
{
    
    int sfd;
    char buf[128]="";
    ssize_t res=0;
    //创建套接字
    sfd=socket(AF_INET,SOCK_DGRAM,0);
    if(res<0)
    {
        PRINTF_ERR("socket");
        return -1;
    }

    struct sockaddr_in cin;
    cin.sin_family=AF_INET;
    cin.sin_port  =htons(SPORT); 
    cin.sin_addr.s_addr=inet_addr(IP);
    socklen_t  addrlen=sizeof(cin);
    //绑定ip地址和端口
    if(bind(sfd,(struct sockaddr *)&cin, addrlen)<0)
    {
        PRINTF_ERR("bind");
        return -1;
    }

    while(1)
    {    
        //接收数据                                                      
        bzero(buf,sizeof(buf));
        res=recvfrom(sfd,buf , sizeof(buf), 0, (struct sockaddr *)&cin, &addrlen);
        if(res<0)
        {
            PRINTF_ERR("recvform");
            return -1;
        }
        printf("[%s|%d]\t%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
    }
        //关闭套接字
    close(sfd);

    return 0;
}

b)发送方

#include"header.h"

#define SPORT 2009
#define IP "192.168.8.255"


int main(int argc, const char *argv[])
{
    int sfd=0;
    char buf[128]="";

    //创建套接字
    sfd= socket(AF_INET ,SOCK_DGRAM ,0);
    if(sfd<0)
    {
        PRINTF_ERR("socket");
        return -1;
    }
    int reuse=1;
    if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(int))<0)
    {
        PRINTF_ERR("setsockopt");
        return -1;
    }
    //绑定ip地址和端口号
    struct sockaddr_in sin;
    sin.sin_family=AF_INET;
    sin.sin_port  =htons(SPORT);
    sin.sin_addr.s_addr=inet_addr(IP);
     struct sockaddr_in cin;
     socklen_t addrlen=sizeof(cin);
     ssize_t res;
     while(1)
     {
          //发送数据给接收方
        printf("请输入要发送的内容>>>\n");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]=0;
         res= sendto(sfd, buf, sizeof(buf), 0,(struct sockaddr *)&sin, sizeof(sin));
         if(res<0)
         {
             PRINTF_ERR("sendto");
            return -1;;
         }
     }
        
    //关闭套接字
     close(sfd);  
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: smcdraw2.14是一种数字化的绘图软件,它具有各种绘图功能和工具,可以帮助用户轻松进行图形设计和绘制。smcdraw2.14具有简洁易用的界面,适合初学者和专业设计师使用。 首先,smcdraw2.14具有丰富的绘图功能,用户可以使用各种形状和线条工具创建各种图形,如矩形、圆形、箭头等。同时,它还提供了丰富的颜色、线型和填充选项,使用户能够根据自己的需求进行个性化的设计。 其次,smcdraw2.14还具有强大的编辑功能。用户可以调整图形的大小、位置和旋转角度,还可以改变图形的颜色和透明度。此外,smcdraw2.14还提供了各种绘制和编辑工具,如剪切、复制、粘贴、重排等,方便用户对绘图进行修改和操作。 此外,smcdraw2.14还支持导入和导出多种文件格式,用户可以将绘制的图形保存为常见的图像格式,如PNG、JPG等,以便后续使用。同时,用户还可以将已有的图像导入到smcdraw2.14中进行编辑和修改。 最后,smcdraw2.14还具有实用的辅助工具,如标尺和网格线,可以帮助用户更精确地进行绘图。此外,该软件还支持撤销和重做功能,用户可以轻松地回到先前的操作步骤。 总之,smcdraw2.14是一款功能强大、操作简便的数字化绘图软件,它适用于各类用户,无论是初学者还是专业设计师,都可以通过smcdraw2.14实现高质量的绘图和设计。 ### 回答2: smcdraw2.14是一个特定的名词或短语,无法明确其含义和提供具体回答。请提供更多相关信息或背景,以便我可以为您提供更有针对性的答案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值