当前位置: 首页 > news >正文

客户端(服务器下载文件)

一、客户端代码

        客户端代码

//实现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;
}

http://www.lryc.cn/news/437348.html

相关文章:

  • P1544 三倍经验 (记忆化搜索)
  • 【在Python中创建简单界面计算器】
  • 【四范式】浅谈NLP发展的四个范式
  • --- 数据结构 优先级队列 --- java
  • 鸿萌数据恢复服务:如何恢复 Mac 系统中被擦除的文件?
  • 片段阅读2_中心理解以外题型
  • 【网络安全 | 渗透工具】IIS 短文件名枚举工具—shortscan安装使用教程
  • 数据结构——栈和队列(队列的定义、顺序队列以及链式队列的基本操作)
  • el-table 的单元格 + 图表 + 排序
  • FPGA第 9 篇,Verilog 中的关键字和基数
  • 什么是单元测试?怎么做?
  • 论文复现--基于LeNet网络结构的数字识别
  • Vue3 响应式工具函数isRef()、unref()、isReactive()、isReadonly()、isProxy()
  • 数据结构之简单选择排序介绍与举例
  • 九、Redis 的实际使用与Redis的设计
  • 乔拓云模板助力,微信小程序快速上线无需愁备案
  • Android命令行查看CPU频率和温度
  • 力扣: 翻转字符串里的单词
  • Wophp靶场寻找漏洞练习
  • 国内智能运维厂商月度动态 202408
  • C++ 左值与右值浅谈
  • oracle 如何查死锁
  • 如何编写ChatGPT提示词
  • java项目之基于Spring Boot智能无人仓库管理源码(springboot+vue)
  • 大厂前端常见的笔试题目
  • 网络插件 Cilium 更换 Calico
  • SpringSecurity原理解析(二):认证流程
  • 数据中台 | 数据资源管理平台介绍
  • 智慧环保平台建设方案
  • SpringMVC映射请求;SpringMVC返回值类型;SpringMVC参数绑定;