5.21作业

网盘作业

#include <header.h>
#define SER_IP "192.168.125.104"
#define SER_PORT 69
int main(int argc, const char *argv[])
{
    int cfd = socket(AF_INET,SOCK_DGRAM,0);
    if(cfd == -1)
    {
        perror("socket");
        return -1;
    }

    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(SER_PORT);
    sin.sin_addr.s_addr = inet_addr(SER_IP);
    
    char buf[516] = "";
    char buf1[4] = "";
    int a;
    char s[128] = "";
    int size = 0;
    while(1)
    {
        bzero(buf,sizeof(buf));
        bzero(s,sizeof(s));
        bzero(buf1,sizeof(buf1));
        printf("--------------------------------\n");
        printf("1:单于夜遁逃   输入1开始快速下载\n");
        printf("2:江流石不转   输入2开始稳定上传\n");
        printf("3:小舟从此逝   输入3开始退出网盘\n");
        printf("-----卧龙网盘,给你带来最好的体验\n");
        scanf("%d",&a);
    if(a == 1)
    {
        printf("请输入要下载的文件名\n");
        scanf("%128s",s);
        int fd = open(s,O_CREAT | O_WRONLY | O_TRUNC ,0666);
        short *p1 = (short*)buf;
        *p1 = htons(1);
        char *p2 = buf+2;
        strcpy(p2,s);
        char *p4 = p2+strlen(p2)+1;
        strcpy(p4,"octet");

        size = 4+strlen(p2)+strlen(p4);
        sendto(cfd,buf,size,0,(struct sockaddr*)&sin, sizeof(sin));

        bzero(buf,sizeof(buf));
        while(1)
        {

        int so = recvfrom(cfd,buf,sizeof(buf),0,NULL,NULL);
        write(fd,buf,sizeof(buf));

        strcpy(buf1,buf);
        short *s1 = (short*)buf1;
        *s1 = htons(4);
        sendto(cfd,buf1,sizeof(buf1),0,(struct sockaddr*)&sin,sizeof(sin));
        if(so < 516)
         {
            printf("%s下载完成\n",s);
            break;
        }
        bzero(buf,sizeof(buf));
        }

    }else if(a == 2)
    {
        printf("请输入要上传的文件名\n");
        scanf("%128s",s);
        int fd = open(s,O_RDONLY);
        short *p1 = (short*)buf;
        *p1 = htons(2);
        char *p2 = buf+2;
        strcpy(p2,s);
        char *p4 = p2+strlen(p2)+1;
        strcpy(p4,"octet");

        size = 4+strlen(p2)+strlen(p4);
        sendto(cfd,buf,size,0,(struct sockaddr*)&sin, sizeof(sin));

        bzero(buf,sizeof(buf));
        while(1)
        {

        read(fd,buf,sizeof(buf));
        int so = sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin));

        strcpy(buf1,buf);
        short *s1 = (short*)buf1;
        *s1 = htons(4);
        sendto(cfd,buf1,4,0,(struct sockaddr*)&sin,sizeof(sin));

        if(so  < 516)
        {
            printf("%s上传完成\n",s);
            break;
        }
        }
                                                                                                                                      
    }else if (a == 3)
    {
        break;  
    }
    }
    return 0;
}
                                                                                                                                      

广播

#include <header.h>
#define SER_IP  "192.168.125.255"
#define SER_PORT 6666
int main(int argc, const char *argv[])
{
    int cfd = socket(AF_INET,SOCK_DGRAM,0);
    if(cfd == -1)
    {
        perror("socket");
        return -1;
    }

    int reuse = 1;
    if(setsockopt(cfd,SOL_SOCKET,SO_BROADCAST,&reuse,sizeof(reuse)) == -1)
    {
            perror("setsockopt");
            return -1;
    }

    struct sockaddr_in cin;
    cin.sin_family = AF_INET;
    cin.sin_port = htons(SER_PORT);
    cin.sin_addr.s_addr = inet_addr(SER_IP);


    char wbuf[128] = "";
    while(1){
        fgets(wbuf,sizeof(wbuf),stdin);
        wbuf[strlen(wbuf)-1] = 0;
        sendto(cfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&cin,sizeof(cin));
        printf("发送成功\n");
        if(strcmp(wbuf,"over") == 0)                                          
        {
            break;
        }
    }
    close(cfd);
    return 0;
    }











#include <header.h>
#define SER_IP  "192.168.125.255"
#define SER_PORT 6666
int main(int argc, const char *argv[])
{
    int sfd = socket(AF_INET,SOCK_DGRAM,0);
    if(sfd == -1)
    {
        perror("socket");
        return -1;
    }
    printf("sfd = %d\n",sfd);

    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(SER_PORT);
    sin.sin_addr.s_addr = inet_addr(SER_IP);

    if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1)
    {
        perror("bind");
        return -1;
    }
    printf("bind surssacc");

    char rbuf[128] = "";
    while(1){
        bzero(rbuf,sizeof(rbuf));
        recv(sfd,rbuf,sizeof(rbuf),0);
        printf("收到:%s\n",rbuf);
        if(strcmp(rbuf,"over") == 0)
        {                                                       
            break;
        }

    }


    close(sfd);
    return 0;
}

组播

#include <header.h>
int main(int argc, const char *argv[])
{
    int sfd = socket(AF_INET,SOCK_DGRAM,0);
    if(sfd == -1)
    {
        perror("socket");
        return -1;
    }

    struct ip_mreqn imr;
    imr.imr_multiaddr.s_addr = inet_addr("224.1.2.3");
    imr.imr_address.s_addr = inet_addr("192.168.125.125");
    imr.imr_ifindex = 2;

    if(setsockopt(sfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&imr,sizeof(imr)) == -1)
    {
        perror("setsockopt");
        return -1;
    }

    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = inet_addr("224.1.2.3");
    sin.sin_port = htons(5555);

    if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1)
    {
        perror("bind");
        return -1;                                                               
    }

    char rbuf[128] = "";
    while(1){
    bzero(rbuf,sizeof(rbuf));
    recv(sfd,rbuf,sizeof(rbuf),0);
    printf("收到:%s\n",rbuf);
    if(strcmp(rbuf,"over") == 0)
    {
        break;
    }
    }
    close(sfd);

    return 0;
}
                                                                                 









#include <header.h>
int main(int argc, const char *argv[])
{
    int cfd = socket(AF_INET,SOCK_DGRAM,0);
    if(cfd == -1)
    {
        perror("socket");
        return -1;
    }


    struct sockaddr_in cin;
    cin.sin_family = AF_INET;
    cin.sin_port = htons(5555);
    cin.sin_addr.s_addr = inet_addr("224.1.2.3");

    char wbuf[128] = "";
    while(1){
        fgets(wbuf,sizeof(wbuf),stdin);
        wbuf[strlen(wbuf)-1] = 0;
        sendto(cfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&cin,sizeof(cin));
        printf("发送成功\n");
        if(strcmp(wbuf,"over") == 0)
        {
            break;
        }
    }
    close(cfd);

    return 0;
}                                                                                     

流式域

#include<header.h>

int main(int argc, const char *argv[])
{
    int sfd = socket(AF_UNIX, SOCK_STREAM, 0);
    if(sfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("socket success sfd = %d\n", sfd);   //3


    if(access("./unix", F_OK) == 0)
    {
        if(unlink("./unix") ==-1)
        {
            perror("unlink error");
            return -1;
        }
    }

    struct sockaddr_un sun;
    sun.sun_family = AF_UNIX;    //通信域
    strcpy(sun.sun_path , "./unix");         //套接字文件路径


    if(bind(sfd, (struct sockaddr*)&sun, sizeof(sun)) ==-1)
    {
        perror("bind error");
        return -1;
    }
    printf("bind success\n");



    if(listen(sfd, 128)==-1)
    {
        perror("listen error");
        return -1;
    }
    printf("listen success\n");

    struct sockaddr_un cun;
    socklen_t addrlen = sizeof(cun);

    int newfd = accept(sfd, (struct sockaddr*)&cun, &addrlen);
    if(newfd == -1)
    {
        perror("accept error");
        return -1;                                                                                           
    }

    printf("[%s]:发来连接请求\n", cun.sun_path);

    char rbuf[128] = "";            //读取消息内容的容器

    while(1)
    {
        bzero(rbuf, sizeof(rbuf));

        int res = recv(newfd, rbuf, sizeof(rbuf), 0);
        if(res == 0)
        {
            printf("客户端已经下线\n");
            break;
        }

        printf("[%s]:%s\n", cun.sun_path, rbuf);

        strcat(rbuf, "*_*");

        send(newfd, rbuf, strlen(rbuf), 0);
        printf("发送成功\n");
    }

    close(newfd);
    close(sfd);
    return 0;
}
                                                                                                             
                                                                                                             















#include<header.h>


int main(int argc, const char *argv[])
{
    int cfd = socket(AF_UNIX, SOCK_STREAM, 0);
    if(cfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("cfd = %d\n", cfd);

    if(access("./linux", F_OK) == 0)
    {
        if(unlink("./linux") ==-1)
        {
            perror("unlink error");
            return -1;
        }
    }


    struct sockaddr_un cun;
    cun.sun_family = AF_UNIX;
    strcpy(cun.sun_path, "./linux");

    if( bind(cfd, (struct sockaddr*)&cun, sizeof(cun)) ==-1)
    {
        perror("bind error");
        return -1;
    }
    printf("bind success\n");


    struct sockaddr_un sun;
    sun.sun_family = AF_UNIX;
    strcpy(sun.sun_path, "./unix");

    if(connect(cfd, (struct sockaddr*)&sun, sizeof(sun))==-1)
    {
        perror("connect error");
        return -1;
    }
    printf("connect success\n");

    char wbuf[128] = "";
    char rbuf[128] = "";
    while(1)
    {
        fgets(wbuf, sizeof(wbuf), stdin);
        wbuf[strlen(wbuf)-1] = '\0';           //将读取的换行改成'\0'

        send(cfd, wbuf, strlen(wbuf), 0);
        printf("发送成功\n");

        bzero(rbuf, sizeof(rbuf));

        recv(cfd, rbuf, sizeof(rbuf), 0);
        printf("服务器发来的消息为:%s\n", rbuf);
    }

    close(cfd);

    return 0;
}

                                                                              
                                                                              



报式域

#include<header.h>


int main(int argc, const char *argv[])
{
    int sfd = socket(AF_UNIX, SOCK_DGRAM, 0);
    if(sfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("sfd = %d\n", sfd);            //3


    if(access("./unix", F_OK) == 0)
    {
        if(unlink("./unix") ==-1)
        {
            perror("unlink error");
            return -1;
        }
    }


    struct sockaddr_un sun;
    sun.sun_family = AF_UNIX;
    strcpy(sun.sun_path, "./unix");


    if(bind(sfd, (struct sockaddr*)&sun, sizeof(sun)) ==-1)                                                  
    {
        perror("bind error");
        return -1;
    }
    printf("bind success\n");

    char rbuf[128] = "";
    struct sockaddr_un cun;
    socklen_t addrlen = sizeof(cun);

    while(1)
    {
        bzero(rbuf,sizeof(rbuf));

        recvfrom(sfd, rbuf, sizeof(rbuf), 0, (struct sockaddr*)&cun, &addrlen);
        printf("[%s]:%s\n", cun.sun_path, rbuf);

        strcat(rbuf, "*_*");
        if(sendto(sfd, rbuf, strlen(rbuf), 0, (struct sockaddr*)&cun, sizeof(cun))==-1)
        {
            perror("write error");
            return -1;
        }
        printf("发送成功\n");

    }

    close(sfd);

    return 0;
}
                                                                                                             









#include<header.h>
int main(int argc, const char *argv[])
{                                                                                                        
    int cfd = socket(AF_UNIX, SOCK_DGRAM, 0);
    if(cfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("cfd = %d\n", cfd);            //3

    struct sockaddr_un cun;
    cun.sun_family = AF_UNIX;
    strcpy(cun.sun_path, "./linux");

    if(access("./linux", F_OK) == 0)
    {
        if(unlink("./linux") ==-1)
        {
            perror("unlink error");
            return -1;
        }
    }


    if(bind(cfd, (struct sockaddr*)&cun, sizeof(cun)) ==-1)
    {
        perror("bind error");
        return -1;
    }
    printf("bind success\n");


    char wbuf[128] = "";
    struct sockaddr_un sun;
    sun.sun_family = AF_UNIX;
    strcpy(sun.sun_path, "./unix");


    char rbuf[128] = "";

    while(1)
    {
        bzero(wbuf,sizeof(wbuf));
        bzero(rbuf, sizeof(rbuf));

        fgets(wbuf, sizeof(wbuf), stdin);
        wbuf[strlen(wbuf)-1] = 0;

        sendto(cfd, wbuf, strlen(wbuf), 0, (struct sockaddr*)&sun, sizeof(sun));
        printf("发送成功\n");

        recvfrom(cfd, rbuf, sizeof(rbuf), 0,NULL, NULL);
        printf("收到服务器消息为:%s\n", rbuf);

    }

    close(cfd);

    return 0;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值