客户端(服务器下载文件)
一、客户端代码
客户端代码
//实现TCP客户端通信
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/ip.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<fcntl.h>int main(int argc, const char *argv[])
{//1、创建套接字int sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd<0){printf("创建失败\n");return -1;}/*//2、绑定套接字//填写自己的地址信息,不是必要的struct sockaddr_in clientaddr;clientaddr.sin_family=AF_INET;clientaddr.sin_port=htons(10000);clientaddr.sin_addr.s_addr=inet_addr("192.168.124.29");int bind_ret=bind(sockfd,(struct sockaddr *)&clientaddr,sizeof(clientaddr));if(bind_ret<0){printf("绑定失败\n");return -1;}*///3、建立连接connect//填写对方信息struct sockaddr_in destaddr;destaddr.sin_family=AF_INET;destaddr.sin_port=htons(8888);destaddr.sin_addr.s_addr=inet_addr("192.168.124.29");int connect_ret=connect(sockfd,(struct sockaddr*)&destaddr,sizeof(destaddr));if(connect_ret<0){printf("连接失败\n");return -1;}//4、发送数据sendwhile(1){char buf[100];scanf("%s",buf);send(sockfd,buf,100,0);int fd=open(buf,O_WRONLY|O_CREAT|O_TRUNC,0664);if(fd<0){printf("open failed");return -1;}while(1){bzero(buf,100);int ret=recv(sockfd,buf,100,0);printf("%s",buf);if(ret==0)break;write(fd,buf,ret);}}//6、关闭文件close(sockfd);return 0;
}
二、服务器代码
服务器使用IO多路复用
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include<fcntl.h>#define SERVERADDR "192.168.124.29"
#define PORT 8888int main(int argc, const char *argv[]) {// 创建套接字int listenfd = socket(AF_INET, SOCK_STREAM, 0);if (listenfd < 0) {perror("socket failed");return -1;}// 绑定套接字struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(PORT);serveraddr.sin_addr.s_addr = inet_addr(SERVERADDR);if (bind(listenfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) < 0) {perror("bind failed");return -1;}// 监听套接字if (listen(listenfd, 20) < 0) {perror("listen failed");return -1;}//定义文件描述符表fd_set master_fds, read_fds;int max_fd = listenfd;//清空文件描述符表FD_ZERO(&master_fds);//将监听套接字加入文件描述符表FD_SET(listenfd, &master_fds);while (1){read_fds = master_fds;// 监视文件描述符集,进程通知内核监视的内核是否准备就绪(是否有IO事件)int activity = select(max_fd + 1, &read_fds, NULL, NULL, NULL);if (activity < 0) {perror("select failed");return -1;}// 处理新连接if (FD_ISSET(listenfd, &read_fds)){struct sockaddr_in clientaddr;socklen_t len = sizeof(clientaddr);int client_fd = accept(listenfd, (struct sockaddr*)&clientaddr, &len);if (client_fd < 0){perror("accept failed");continue;}printf("New connection from %s:%hu\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));//将新创建的客户端文件描述符加入到文件描述符表当中FD_SET(client_fd, &master_fds);if (client_fd > max_fd){max_fd = client_fd;}}// 处理已连接客户端的数据for (int i = listenfd + 1; i <= max_fd; ++i){if (FD_ISSET(i, &read_fds)){char buf[100];bzero(buf, 100);int ret = read(i, buf, 100);int fd=open(buf,O_RDONLY);if(fd<0){printf("open failed\n");return -1;}char file[100];while(1){bzero(file,100);int read_ret = read(fd,file,100);printf("%d ",read_ret);if(read_ret==0)break;send(i, file, read_ret,0);}printf("download ok\n");}}}close(listenfd);return 0;
}
相关文章:
客户端(服务器下载文件)
一、客户端代码 客户端代码 //实现TCP客户端通信 #include<stdio.h> #include<unistd.h> #include<sys/stat.h> #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<netinet/ip.h> #include<netinet/in…...
P1544 三倍经验 (记忆化搜索)
三倍经验 题目描述 数字金字塔由 n n n 行整数组成,第 i ( 1 ≤ i ≤ n ) i(1\le i\le n) i(1≤i≤n) 行有 i i i 个数字,一个示例如下。 73 98 1 02 7 4 4 4 5 2 6 5现在你在金字塔的顶部(第一行)&…...
【在Python中创建简单界面计算器】
在Python中创建带有简单界面的计算器,我们可以继续使用Tkinter库,这是一个非常流行且易于使用的GUI库。下面是一个简单的计算器实现,它支持加、减、乘、除四种基本运算。 首先,确保你的Python环境中已经安装了Tkinter。Tkinter通…...

【四范式】浅谈NLP发展的四个范式
自然语言处理(Natural Language Processing,NLP)是计算机科学,人工智能,语言学关于计算机和人类自然语言之间的相互作用的领域,是计算机科学领域与人工智能领域中的一个重要方向。NLP发展到今天已经进入到了…...

--- 数据结构 优先级队列 --- java
之前提高到队列是一种先进先出的结构,但是在某些情况下操作的数据具有优先级,那么对他先进行操作,这时队列就不能满足需求了,因为队列只能操作对头的元素,而具有优先级的数据不一定是在对头,这样就需要优先…...
鸿萌数据恢复服务:如何恢复 Mac 系统中被擦除的文件?
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据备份、数据恢复解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 公司是多款国际主流数据恢复软件的授权代理商,为…...
片段阅读2_中心理解以外题型
目录 一、标题拟定二、下文推断1.三种简单结构:2.三种不易识别结构:三、语句填入1.在开头2.在中间3.在尾句4.盯细节四、语句排序1.宏观把握2.盯住细节五、细节判断一、标题拟定 题型说明:主旨意图题的变型,就是把主旨意图进行“标题化”的改造;正确选项要求:标题中需包含…...
【网络安全 | 渗透工具】IIS 短文件名枚举工具—shortscan安装使用教程
未经许可,不得转载。 文章目录 shortscan安装使用Shortutil 工具shortscan ShortScan 是一种用于在 Microsoft IIS (Internet Information Services) Web 服务器上进行短文件名枚举的工具。该工具可以帮助攻击者利用 IIS 的文件名处理特性,通过预测性扫描枚举服务器上的文件…...

数据结构——栈和队列(队列的定义、顺序队列以及链式队列的基本操作)
目录 队列(queue)的定义 顺序队——队列的顺序表示和实现 顺序队列(循环队列)的类型定义 顺序队列上溢问题的解决方法 编辑 循环队列的基本操作 队列的基本操作——队列的初始化 队列的基本操作——求队列的长度 队列的…...

el-table 的单元格 + 图表 + 排序
<el-table border :data"tableDataThree" height"370px" style"width: 100%"><el-table-column :key"activeName 8" width"50" type"index" label"序号" align"center"></el…...

FPGA第 9 篇,Verilog 中的关键字和基数
前言 在 Verilog 中,关键字(Keywords)和基数(Radix)是语言的重要组成部分,它们有助于描述和定义硬件设计。上期分享了 Verilog 的基本使用,以及数据类型、逻辑值和算数运算符的简单应用&#x…...

什么是单元测试?怎么做?
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小…...

论文复现--基于LeNet网络结构的数字识别
前言 一直就听说学习深度学习无非就是看论文,然后复现,不断循环,这段时间也看了好几篇论文(虽然都是简单的),但是对于我一个人自学,复现成功,我感觉还是挺开心的 本人初学看论文的思路:聚焦网络…...

Vue3 响应式工具函数isRef()、unref()、isReactive()、isReadonly()、isProxy()
isRef() isRef():检查某个值是否为 ref。 isRef函数接收一个参数,即要判断的值。如果该参数是由ref创建的响应式对象,则返回true;否则,返回false。 import { ref, isRef } from vue const normalValue 这是一个普通…...
数据结构之简单选择排序介绍与举例
简单选择排序 简单选择排序是一种排序算法,其基本思想是:通过n-i次关键字间的比较,从n-i1个记录中选出关键字最小的记录,并和第i个记录交换之。 举例: 给定数组 [64, 25, 12, 22, 11],进行简单选择排序。…...

九、Redis 的实际使用与Redis的设计
一、多级缓存架构 在线上系统中,一定不会单纯的只部署一个Redis集群,而是使用Redis结合其他的多级缓存应用进行架构。 使用多级缓存架构的优点就是可以使不同类型的数据分布在不同的应用中,比如redis的热点key可以存储到nginx本地缓存、服务…...

乔拓云模板助力,微信小程序快速上线无需愁备案
想要快速打造并上线自己的微信小程序吗?乔拓云平台是您的不二之选!无需担心复杂的备案流程,乔拓云提供免费服务,远程协助您轻松完成微信小程序的备案工作。 只需简单几步,您的小程序就能闪亮登场:首先&…...
Android命令行查看CPU频率和温度
在 Android 设备上,你可以通过命令行工具 adb 来查看 CPU 温度和 CPU 频率,并确定是否有降频情况。以下是具体步骤: 1. 查看 CPU 频率 你可以使用以下命令来查看 CPU 各个核心的当前频率: adb shell cat /sys/devices/system/c…...

力扣: 翻转字符串里的单词
文章目录 需求分析代码结尾 需求 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符…...

Wophp靶场寻找漏洞练习
1.命令执行漏洞 打开网站划到最下,此处的输入框存在任意命令执行漏洞 输入命令whoami 2.SQL注入 搜索框存在SQL注入,类型为整数型 最终结果可以找到管理员账户和密码 3.任意文件上传漏洞 在进入管理员后台后,上传木马文件 访问该文件&…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...