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;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MiniCPM-V】win10本地部署OCR等性能测试

性能尝试 本地配置如下 --------------------------------------------------------------------------------------- | NVIDIA-SMI 546.80 Driver Version: 546.80 CUDA Version: 12.3 | |-----------------------------------------------------…

QQ名片满级会员装x助手HTML源码

源码介绍 QQ名片满级会员展示生成HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;保存素材去选择QQ个性名片-选择大图模板-把图上传照片墙即可 源码效果 源码下载 蓝奏云&#xff1a;http…

第18章-综合以上功能 基于stm32的智能小车(远程控制、避障、循迹) 基于stm32f103c8t6/HAL库/CubeMX/超详细,包含代码讲解和原理图

这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 第18章-综合以上功能 18-按键和app按钮切换功能 根据上面介绍&#xff0c;我们的模式可…

城市空气质量数据爬取分析可视化

城市空气质量数据爬取分析可视化 一、效果展示二、完整代码2.1 数据爬取代码2.2 数据分析代码一、效果展示 先来看一下数据情况以及可视化效果,本项目使用了pyecharts绘制了日历图、雷达图、折线图、柱状图、饼图和平行坐标系。完整代码附后: 数据如下: 日历图: 饼图: …

Go源码--sync库(1)

简介 这篇主要介绍 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顾名思义 只执行一次 废话不说 我们看源码 英文介绍直接略过了 感兴趣的建议读一读 获益匪浅 其结构体如下 Once 是一个严格只执行一次的object type Once struct {// 建议看下源码的注解&#xf…

【找出缺失的观测数据】python

思路&#xff1a; 主要在于分配剩余的部分分配问题 代码&#xff1a; class Solution:def missingRolls(self, rolls: List[int], mean: int, n: int) -> List[int]:m len(rolls)total_sum (n m) * meantoset total_sum - sum(rolls)# 检查 toset 是否在可能的范围内i…

亚马逊高效广告打法及数据优化,亚马逊高阶广告打法课

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/89342733 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 001.1-亚马逊的广告漏斗和A9算法的升级变化.mp4 002.2-流量入口解析和广告的曝光机制.mp4 003.3-标签理论 .mp4 004.4-不同广告类…

影响所有股票、债券和ETF交易!一文看懂美国“T+1”结算新规

T1对投资者有何好处&#xff1f;有哪些风险&#xff1f;T1已经到来&#xff0c;T0还远吗&#xff1f; 美股将在本周迎来历史性时刻。 从当地时间5月28日开始&#xff0c;美股交易结算周期将由T2缩短至T1&#xff0c;即投资者当天卖出的股票&#xff0c;在交易后一个工作日就能…

蓝牙模块唤醒原理是怎样的?

随着科技的发展&#xff0c;蓝牙技术已经广泛应用于各种设备&#xff0c;如智能手机、平板电脑、智能手表等。蓝牙模块作为一种重要的通信手段&#xff0c;为我们的生活带来了极大的便利。然而&#xff0c;蓝牙模块并不仅仅是用于传输数据的工具&#xff0c;它还具有一项独特的…

LangChain之链的认识

Chain链 概述 为开发更复杂的应用程序&#xff0c;需要使用Chain来链接LangChain中的各个组件和功能&#xff0c;包括模型之间的链接以及模型与其他组件之间的链接。 链在内部把一系列的功能进行封装&#xff0c;而链的外部则又可以组合串联。 链其实可以被视为LangChain中的一…

unity制作app(11)--dropdown统一字体

下拉栏统一字体只能在执行的时候&#xff0c;而且要深入到content的最下层 全改以后 这样是无法保存的&#xff0c;但此时已经具备了找content的思维&#xff0c;在非play状态下做如下修改 其他下拉栏照改就可以了。

【CTF Web】CTFShow web2 Writeup(SQL注入+PHP+UNION注入)

web2 1 管理员赶紧修补了漏洞&#xff0c;这下应该没问题了吧&#xff1f; 解法 注意到&#xff1a; <!-- flag in id 1000 -->但是 or 被拦截了。 if(preg_match("/or|\/i",$id)){die("id error");}使用UNION注入&#xff1a; ?id1 union sele…

【Linux-RTC】

Linux-RTC ■ rtc_device 结构体■ RTC 时间查看与设置■ 1、时间 RTC 查看■ 2、设置 RTC 时间 ■ rtc_device 结构体 Linux 内核将 RTC 设备抽象为 rtc_device 结构体 rtc_device 结构体&#xff0c;此结构体定义在 include/linux/rtc.h 文件中 ■ RTC 时间查看与设置 ■ 1…

CSS绘制圆弧

css绘制如图的圆弧&#xff1a; 这种矩形弧形的效果中&#xff0c;弧形的效果一般是由一条曲线拉伸出来的&#xff0c;这条曲线往往是属于一个椭圆的&#xff0c;所以可以绘制一个椭圆&#xff0c;截取部分可视区域实现效果。 <style> .wrapper{width: 400px;height: 60…

完全背包洛谷题单

[USACO08NOV] Buying Hay S 题解&#xff1a;这题看到每个都可以卖出无限多个干草包&#xff0c;就应该想到完全背包&#xff0c;但又不同于普通的完全背包&#xff0c;普通的完全背包是让你通过对应的背包求出最大的价值&#xff0c;但是在这题理解上却是知道能够达到背包容量…

【C/C++】观察者模式

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

香橙派 AIpro开发体验:使用YOLOV8对USB摄像头画面进行目标检测

香橙派 AIpro开发体验&#xff1a;使用YOLOV8对USB摄像头画面进行目标检测 前言一、香橙派AIpro硬件准备二、连接香橙派AIpro1. 通过网线连接路由器和香橙派AIpro2. 通过wifi连接香橙派AIpro3. 使用vscode 通过ssh连接香橙派AIpro 三、USB摄像头测试1. 配置ipynb远程开发环境1.…

AI重塑了我的工作流

阅读内容 Inhai: Agentic Workflow&#xff1a;AI 重塑了我的工作流 4 种主要的 Agentic Workflow 设计模式 Reflection&#xff08;反思&#xff09;&#xff1a;让 Agent 审视和修正自己生成的输出。 举例&#xff1a;如果有两个 Agent&#xff1a;一个负责 Coding&#…

损失函数篇 | YOLOv8更换损失函数之Inner-IoU | 通过辅助边界框计算IoU损失

前言:Hello大家好,我是小哥谈。损失函数是机器学习中用来衡量模型预测值与真实值之间差异的函数。在训练模型时,我们希望通过不断调整模型参数,使得损失函数的值最小化,从而使得模型的预测值更加接近真实值。为弥补现有IoU损失函数在不同的检测任务中的泛化能力较弱且收敛…

unity制作app(9)--拍照 相册 上传照片

1.传输照片&#xff08;任何较大的数据&#xff09;都需要扩展服务器的内存空间。 2.还需要base64编码 2.1客户端发送位置的编码 2.2服务器接收部分的代码