5-21作业

流式域套接字

服务器端实现

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, const char *argv[])
{
    int fp=socket(AF_UNIX,SOCK_STREAM,0);
    if(fp==-1)
    {
        perror("socket");
        return -1;
    }
    if(access("./pith",F_OK)==0)
    {                                                                     
        if(unlink("./pith")==-1)
        {
            perror("unlink");
            return -1;
        }
    }
    struct sockaddr_un cin;
    cin.sun_family=AF_UNIX;
    strcpy(cin.sun_path,"./pith");
    if(bind(fp,(struct sockaddr*)&cin,sizeof(cin))==-1)
    {
        perror("bind");
        return -1;
    }
    listen(fp,128);
    struct sockaddr_un sin;
    socklen_t sinlen=sizeof(sin);
    int rfp=accept(fp,(struct sockaddr*)&sin,&sinlen);
    if(rfp==-1)
    {
        perror("accept");
        return -1;
    }
    char buf[128];
    while(1)
    {
        bzero(buf,sizeof(buf));
        recv(rfp,buf,sizeof(buf),0);
        printf("%s\n",buf);
    }
    close(fp);
    return 0;
}
                                                                          
                                                                          

报式域套接字

服务器端实现

 #include <stdio.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <pthread.h>
 #include <semaphore.h>
 #include <wait.h>
 #include <signal.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <sys/socket.h>
 #include <sys/ipc.h>
 #include <sys/sem.h>
 #include <semaphore.h>
 #include <sys/msg.h>
 #include <sys/shm.h>
 #include <sys/un.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 int main(int argc, const char *argv[])
 {
     int fp=socket(AF_UNIX,SOCK_DGRAM,0);
     if(fp==-1)
     {
         perror("socket");
         return -1;
     }
     if(access("./pith",F_OK)==0)
     {
         if(unlink("./pith")==-1)
         {
             perror("unlink");
             return -1;
         }
     }
     struct sockaddr_un cin;
     cin.sun_family=AF_UNIX;                                           
     strcpy(cin.sun_path,"./pith");
     if(bind(fp,(struct sockaddr*)&cin,sizeof(cin))==-1)
     {
         perror("bind");
         return -1;
     }
     struct sockaddr_un sin;
     socklen_t sinlen=sizeof(sin);
     char buf[128];
     while(1)
     {
         bzero(buf,sizeof(buf));
         recv(fp,buf,sizeof(buf),0);
         send(fp, buf, strlen(buf),0);
         printf("%s\n",buf);
     }
     close(fp);
     return 0;
 }

组播接收端的实现

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, const char *argv[])
{
    int fp=socket(AF_INET,SOCK_DGRAM,0);
    if(fp==-1)
    {
        perror("socket");
        return -1;
    }
    struct ip_mreqn sin;
    sin.imr_multiaddr.s_addr=inet_addr("224.1.2.3");
    sin.imr_address.s_addr=inet_addr("192.168.125.113");
    sin.imr_ifindex=2;

    if(setsockopt(fp,IPPROTO_IP,IP_ADD_MEMBERSHIP,&sin,sizeof(sin))==-1)
    {                                                                                                                                         
        perror("setsockopt");
        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");
    if(bind(fp,(struct sockaddr*)&cin,sizeof(cin))==-1)
    {
        perror("bind");
        return -1;
    }
    char buf[128];
    while(1)
    {
        bzero(buf,sizeof(buf));
        recv(fp,buf,sizeof(buf),0);
        printf("%s\n",buf);
        if(strcmp(buf,"over")==0)
        {
            break;
        }
    }
    close(fp);
    return 0;
}

广播接收端的实现

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>                                                                  
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
#include <sys/socket.h>
int main(int argc, const char *argv[])
{
    int fp=socket(AF_INET,SOCK_DGRAM,0);
    if(fp==-1)
    {
        perror("socket");
        return -1;
    }
    struct sockaddr_in sin;
    sin.sin_family=AF_INET;
    sin.sin_port=htons(6666);
    sin.sin_addr.s_addr=inet_addr("192.168.125.255");
    int size=sizeof(sin);
    if(bind(fp,(struct sockaddr*)&sin,sizeof(sin))==-1)
    {
        perror("bind");
        return -1;
    }
    char buf[128];
    while(1)
    {
        bzero(buf,sizeof(buf));
        recvfrom(fp,buf,sizeof(buf),0,(struct sockaddr*)&sin,&size);
        printf("%s\n",buf);
        if(strcmp(buf,"over")==0)
        {
            break;
        }
    }
    return 0;
}

一、项目中如何实现TCP的并发

多进程实现:

  1. 创建服务器端套接字
  2. 将套接字绑定端口号和IP地址
  3. 设置该套接字被动监听状态
  4. 循环接受客户端的连接请求
  5. 创建子进程
  6. 在子进程中与接受的客户端进行数据收发
  7. 关闭连接

多线程实现:

  1. 创建服务器端套接字
  2. 将套接字绑定端口号和IP地址。
  3. 设置该套接字被动监听状态
  4. 循环接受客户端的连接请求
  5. 创建新线程
  6. 在分线程中与接受的客户端进行数据收发
  7. 关闭连接

二、TCP通信过程中的三次手

  1. 第一次握手: 客户端向服务端发送一个连接请求

  2. 第二次握手: 服务器收到客户端连接请求后,给客户端发送一个自己收到的消息,并且再发送连接请求

  3. 第三次握手: 客户端收到服务端连接请求后,给服务端发送一个自己收到的消息

三、四次挥手的过程

  1. 第一次挥手: 客户端向服务端发送一个断开请求

  2. 第二次挥手:服务器收到客户端断开请求后,给客户端发送一个自己收到的消息

  3. 第三次挥手: 服务端向客户端发送一个断开请求

  4. 最后一次挥手: 客户端收到服务端连接请求后,给服务端发送一个自己收到的消息

四、UDP为什么丢包,怎么处理?丢包发生在哪一层,为什么?

因为UDP面向无连接的,并不像TCP面向有连接的那样稳定

减小发生数据的速率

网络层

因为数据包丢失这些问题发送在网络层

五、TCP是同步还是异步,谈谈对同步异步的理解

同步

同步:指程序按顺序执行,每一个操作需要等待上一个操作执行完才开始执行

异步:指程序不按顺序执行,每一个操作不需要等待上一个操作执行完才开始执行

六、为什么TCP会发粘包,怎么处理

当发送的数据包很小时,会将这个数据包和下个数据包一起发送

减小发送数据包的速率

七、组播和广播的区别

范围:广播发送数据给同一网络下的每个主机,组播发送到一个多播组里,只有加入这个组里的主机才能收到数据

IP地址:广播地址为网络号+255,组播地址为D类网络

八、阻塞IO和非阻塞IO的区别

在阻塞IO中,当应用程序发起一个IO操作时,程序会一直等待,直到操作完成并返回结果。

在阻塞IO中,如果没有数据可读取或无法立即进行写入,程序将被阻塞,无法执行其他任务,直到IO操作完成

在非阻塞IO中,当应用程序发起一个IO操作时,程序会立即返回,不会等待操作完成。

在非阻塞IO中,如果没有数据可读取或无法立即进行写入,程序也会立即返回,而不会被阻

九、并发和并行的区别

并发:表面是多个任务同时执行,实际是多个任务交替执行,只有获得时间片的任务才开始执行,一个时间段类只有一个任务在执行,但因为处理速度很快,这个时间段一般很小

并行:真正意义是的多个任务同时执行,利用多核处理器同时执行各个任务

include <stdio.h>
include <unistd.h>
include <stdlib.h>
include <sys/types.h>
include <sys/stat.h>
include <fcntl.h>
include <pthread.h>
include <semaphore.h>
include <wait.h>
include <signal.h>
include <sys/socket.h>
include <arpa/inet.h>
include <sys/socket.h>
include <sys/ipc.h>
include <sys/sem.h>
include <semaphore.h>
include <sys/msg.h>
include <sys/shm.h>
include <sys/un.h>
include <sys/socket.h>
nt main(int argc, const char *argv[])

   int fp=socket(AF_INET,SOCK_STREAM,0);
   if(fp==-1)
   {
       perror("soket");
       return -1;
   }
   struct sockaddr_in sin;
   sin.sin_family=AF_INET;
   sin.sin_port=htons(69);
   sin.sin_addr.s_addr=inet_addr(argv[1]);
   socklen_t len=sizeof(sin);
   while(1)
   {
       printf("**********************\n");
       printf("********1.下载********\n");
       printf("********2.上传********\n");
       printf("********3.退出********\n");
       printf("**********************\n");

       short x;
       char buf[516]="";
       scanf("%d\n",&x);
       while(getchar()!=10);
       short *p1=buf;
       *p1=htons(x);

       printf("请输入要下载的文件名>>>");
       char *p2=buf+2;
       char name[128]="";
       scanf("%s",name);
       while(getchar()!=10);
       strcpy(p2,name);

       char *p4=p2+strlen(p2)+1;
       strcpy(p4,"SOCK_STREAM");

       int size=2+strlen(p2)+strlen(p4)+2;


       if(sendto(fp,buf,size,0,(struct sockadd*)&sin,sizeof(sin))==-1)
       {
           perror("send");
           return -1;
       }
       while(1)
       {                                                                                                                                                                                                                     
           if(x==1)
           {
               bzero(buf,sizeof(buf));
               if(recvfrom(fp,buf,sizeof(buf),0,(struct sockaddr*)&sin,&sizeof(sin))==-1);
               {
                   perror("recvfrom");
                   return -1;
               }


               short* p1=buf;
               short* p2=buf+1;

               if(*p1==3)
               {
                   int p=1;
                   if(*p2==p)
                   {
                       printf("下载中\n");
                       p++;
                   }
                   else
                   {
                   }
               }
               else if(*p1==5)
               {
                   if(*p2==0)
                   {}
                   else if(*p2==1)
                   {}
                   else if(*p2==2)
                   {}

                   else if(*p2==3)
                   {}
                   else if(*p2==4)
                   {}
                   else if(*p2==5)
                   {}
               }
           }
       }
       else if(x==2)
       {
           bzero(buf,sizeof(buf));
           send(fp,buf,sizeof(buf),0);
           short* p1=buf;
           short* p2=buf+1;


           if(buf==3)
           {
               printf("上传中\m");

           }
       }
   }
   close(fp);
   return 0;






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【运维项目经历|015】:Nginx Web服务性能提升与优化项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的技术性问题 问题1&#xff1a;本次项目的人员配置&#xff1f; 问题2&#xff1a;本次项目的周期&am…

PX4使用yolo仿真环境搭建

文章目录 前言一、修改机架sdf文件二、安装yolo三、运行 前言 ubuntu20.04 PX4 1.13.3 已配置好PX4 ROS gazebo环境 一、修改机架sdf文件 将双目相机加到仿真的iris机架上 修改下图文件 添加如下&#xff1a; <include><uri>model://stereo_camera</uri>…

tensorrt输出结果为nan的解决方案

系统环境&#xff1a; ubuntu20.04 python3.9 cuda11.8 cudnn8.9.7.29 torch1.13.1cu117&#xff08;pip install torch1.13.1&#xff09; 1.针对cuda版本查了一下trt支持版本&#xff0c;发现V10和V8版本都支持 本着用新不用旧标准&#xff0c;果断下载了8.6&#xff0c…

iptables+SNAT+DNAT

一、Linux包过滤防火墙概述 主要工作在网络层&#xff0c;针对IP数据包&#xff0c;体现在对包内的IP地址、端口、协议等信息的处理上 以下两种称呼都可以表示Linux防火墙 netfilter 位于Linux内核中的包过滤功能体系 成为Linux防火墙的“内核态” 是内核的一部分&#xff0…

誉天Linux云计算架构师就业班要学习哪些内容?

课程设计思路&#xff1a; 根据十多年来毕业学员的就业和反馈&#xff0c;对数百名学员的就业回访;Linux运维&#xff0c;云计算&#xff0c;高并发&#xff0c;分布式&#xff0c;容器&#xff0c;云原生&#xff0c;自动化等是目前市场上就业情况最好&#xff0c;需求量最大&…

SQL查询-电商数据案例

假设我们现在需要是某电商平台数据分析&#xff0c;由于业务需要&#xff0c;需要用sql取数 包括&#xff0c;Python连接数据库到模拟电商数据库&#xff0c;到sql场景查询 1,Python连接SQL数据库 以下是使用Python连接MySQL数据库并进行操作的示例代码&#xff1a; import…

【python】python 全国5A级景区数据采集与pyecharts可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Liunx上安装MySQL

该文章是介绍的是 Ubuntu 操作系统&#xff0c;如果有使用 CentOS 的小伙伴不会的话可以私信我~ 1. 查找安装包 apt list |grep "mysql-server" 2. 安装mysql sudo apt install mysql-server 注意&#xff1a;安装的到最后一步会问你是否继续&#xff0c;输入y / Y就…

python内存马学习

python内存马学习 python内存马学习 python内存马学习环境搭建和复现分析payloadFlask 请求上下文管理机制bypass高版本flask内存马的利用before_request**after_request** teardown_requesterrorhandler相关例题H&NCTF 2024 ezFlask python内存马 环境搭建和复现 from fl…

SQL问题的常用信息收集命令及解决思路 |OceanBase应用实践

面对SQL问题&#xff0c;大家的常用的分析思路是&#xff1a; 一、问题是否源于SQL本身&#xff1f;是的话需进行SQL调优。 二、SQL语句本身无误&#xff0c;但执行效果并未达到我们的预期效果。 检查当前的服务器负载状况&#xff0c;例如CPU利用率、内存占用、IO读写等关键…

图书管理系统——java基础(源码)后续引入数据库,Swing程序设计,支持关注!后续更新……

学了java想要练手&#xff0c;图书管理系统这个项目非常适合你 项目需求大体想法&#xff1a; 能够查看书籍&#xff0c;借阅书籍&#xff0c;打印书籍等功能。输出姓名后能进入为普通用户模式或者管理员模式。 各类包之间协同合作之间关系讲解。 做这个项目的始终是为了对…

新疆 | 金石商砼效率革命背后的逻辑

走进标杆企业&#xff0c;感受名企力量&#xff0c;探寻学习优秀企业领先之道。 本期要跟砼行们推介的标杆企业是新疆砼行业的龙头企业&#xff1a;新疆兵团建工金石商品混凝土有限责任公司&#xff08;以下简称&#xff1a;新疆金石&#xff09;。 从年产80万方到120万方&am…

计算机图形学入门03:基本变换

变换(Transformation)可分为模型(Model)变换和视图(Viewing)变换。在3D虚拟场景中相机的移动和旋转&#xff0c;角色人物动画都需要变换&#xff0c;用来描述物体运动。将三维世界投影变换到2D屏幕上成像出来&#xff0c;也需要变换。 1.二维变换 1.1缩放变换 如上图所示&…

自动化测试-ddt数据驱动yaml文件实战(详细)

前言 ddt 驱动 yaml/yml 文件来实现数据驱动测试 ddt.file_data&#xff1a;装饰测试方法&#xff0c;参数是文件名。文件可以是 json 或者 yaml 类型。 注意&#xff1a;如果文件是以 “.yml”或者".yaml" 结尾&#xff0c;ddt 会作为 yaml 类型处理&#xff0c;…

期权与股票在交易上是有什么区别吗?

国内的股票市场&#xff0c;只能做多&#xff0c;T1交易。期权则分为4个方向&#xff0c;买入看涨期权&#xff0c;买入看跌期权&#xff0c;也就是做多和做空T0双向交易&#xff0c;同时每个方向还区分不同的行权价&#xff0c;每个行权价对应的4个方向的期权&#xff0c;都有…

精通推荐算法6:用户行为序列建模 -- 总体架构

1 行为序列建模技术架构 身处目前这个信息爆炸的时代&#xff0c;用户在各推荐场景上有丰富的行为序列。将行为序列特征引入推荐算法中&#xff0c;有利于丰富特征工程体系、获得更立体和更全面的信息&#xff0c;同时可以表达用户兴趣演化过程&#xff0c;并捕获用户实时兴趣…

取代或转型?人工智能对软件测试的影响(内附工具推荐)

在当今快速发展的数字环境中&#xff0c;从移动App到基于Web的平台&#xff0c;软件已成为我们日常生活和工作不可或缺的一部分。然而&#xff0c;随着软件系统变得越来越复杂&#xff0c;如何确保其质量和可靠性已成为开发人员和测试人员所面临的一大重要挑战。 这就是软件测…

python探索时钟模拟之旅:从设计到实现

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、设计时钟类 三、代码实现 四、扩展功能&#xff1a;指定步数后自动停止 五…

<Transition> expects exactly one child element or component.

近日在vue中使用 Transition 标签是发生了如下报错&#xff1a; [plugin:vite:vue] expects exactly one child element or component. 原因&#xff1a; 仅支持单个元素或组件作为其插槽内容。如果内容是一个组件&#xff0c;这个组件必须仅有一个根元素。 原始代码&#xff1…

【产品经理】技术知识

引言&#xff1a;        在最近频繁的产品管理职位面试中&#xff0c;我深刻体会到了作为产品经理需要的不仅仅是对市场和技术的敏锐洞察&#xff0c;更多的是在复杂多变的环境中&#xff0c;如何运用沟通、领导力和决策能力来引导产品从概念走向市场。这一系列博客将分享…