c++

简介: c++
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#define SOH 0x01#define STX 0x02#define ETX 0x03#define ETB 0x17#define EOT 0x04#define SYN 0x16#define DLE 0x10#define NAK 0x15#define ACK0 0x1000#define ACK1 0x1001intmain(intargc, char*argv[]) {
if (argc!=2) {
printf("Usage: %s <filename>\n", argv[0]);
return1;
    }
constchar*filename=argv[1];
FILE*file=fopen(filename, "rb");
if (file==NULL) {
printf("Failed to open file: %s\n", filename);
return1;
    }
// 创建TCP套接字intsock=socket(AF_INET, SOCK_STREAM, 0);
if (sock==-1) {
printf("Failed to create socket\n");
fclose(file);
return1;
    }
// 设置服务器地址信息structsockaddr_inserver_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
server_addr.sin_port=htons(3568);
// 连接服务器if (connect(sock, (structsockaddr*)&server_addr, sizeof(server_addr)) ==-1) {
printf("Failed to connect to the server\n");
fclose(file);
close(sock);
return1;
    }
// 发送文件数据intsequence=0;
charbuffer[1024];
size_tread_bytes;
intack_sequence=0;
intrecv_ack;
// 发送同步字buffer[0] =SYN;
buffer[1] =SYN;
write(sock, buffer, 2);
// 等待接收方的ACK0if (read(sock, &recv_ack, sizeof(recv_ack)) !=sizeof(recv_ack)) {
printf("Failed to receive ACK\n");
fclose(file);
close(sock);
return1;
    }
if (ntohs(recv_ack) !=ACK0) {
printf("Failed to establish connection\n");
fclose(file);
close(sock);
return1;
    }
while ((read_bytes=fread(buffer, 1, sizeof(buffer), file)) >0) {
size_ttotal_bytes=read_bytes;
if (sequence==0)
buffer[total_bytes++] =SOH;
elsebuffer[total_bytes++] =STX;
// 转义控制字符inti, j;
for (i=1, j=1; i<read_bytes; i++, j++) {
if (buffer[i] ==SYN||buffer[i] ==ETB||buffer[i] ==ETX||buffer[i] ==DLE) {
buffer[j++] =DLE;
            }
buffer[j] =buffer[i];
        }
read_bytes=j;
// 计算BCC校验shortbcc=0;
for (i=0; i<read_bytes; i++) {
bcc+=buffer[i];
        }
buffer[total_bytes++] =ETX;
buffer[total_bytes++] =bcc>>8;
buffer[total_bytes++] =bcc&0xFF;
// 发送数据if (write(sock, buffer, total_bytes) !=total_bytes) {
printf("Failed to send data\n");
fclose(file);
close(sock);
return1;
        }
// 等待接收方的ACKif (read(sock, &recv_ack, sizeof(recv_ack)) !=sizeof(recv_ack)) {
printf("Failed to receive ACK\n");
fclose(file);
close(sock);
return1;
        }
if (ntohs(recv_ack) !=ACK0+sequence) {
printf("Failed to receive ACK\n");
fclose(file);
close(sock);
return1;
        }
sequence=1-sequence;
    }
// 发送结束字符buffer[0] =EOT;
if (write(sock, buffer, 1) !=1) {
printf("Failed to send EOT\n");
fclose(file);
close(sock);
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
17
分享
相关文章
自学软硬件第755 docker容器虚拟化技术youtube视频下载工具
docker容器虚拟化技术有什么用?怎么使用?TubeTube 项目使用youtube视频下载工具
MaxCompute 近实时增全量处理一体化新架构和使用场景介绍
MaxCompute 近实时增全量处理一体化新架构和使用场景介绍
Hologres 的高可用性与容灾解决方案
【9月更文第1天】随着企业对实时数据分析的需求不断增加,数据仓库不仅要具备高性能的查询能力,还需要具备高可用性和灾难恢复的能力。Hologres 作为一款基于 PostgreSQL 的实时数仓服务,不仅提供了强大的在线分析处理(OLAP)功能,还内置了一系列高可用性和容灾机制。本文将详细介绍 Hologres 的高可用架构,并提供实现容灾备份的具体方案。
215 7
解读大模型时代的数据加速:性能、稳定性与一致性一个都不能少
本文探讨了在大模型时代,如何在数据加速中平衡性能、稳定性和一致性,通过阿里云ACK Fluid的实例,详细解析了优化策略与最佳实践,旨在帮助用户高效应对数据管理挑战。
复旦-阿里云研究生专业实践基地合作交流会成功举行
2023年4月12日,复旦大学-阿里云计算有限公司研究生专业实践基地合作交流会在复旦大学江湾校区二号交叉学科楼A1010会议室举行。学校研究生院副院长王昕莅临指导;阿里集团全球人才储备总监曹彬,阿里云高校合作部总经理李贝,阿里云资深技术专家施兴,资深安全专家路放,高级技术专家周磊、王晨、杨晔辉、林帆、薛盛可、林俊旸,阿里云学术与高校合作部刘林岩、沈龙睿、胡锐、李卓君等参会;学院副院长彭鑫,院长助理钱振兴,学院导师代表黄萱菁、熊贇、孙未未、徐扬、王智慧、池明旻、赵进、赵卫东等参会。会议由学院研究生办公室廖炳华主持。
468 0
Python tkinter 实现简易人脸识别系统(基于opencv)
从无到有,基于 opencv 模块,以及开源的正面检测器,用 tkinter 实现的一个简易人脸识别系统
488 0
探究Spring Boot中的IoC容器:实现松耦合的依赖管理
在现代的软件开发中,松耦合和可维护性是极其重要的设计原则。Spring Boot作为一款流行的Java框架,借助于控制反转(IoC)的机制,实现了高度松耦合的组件之间的依赖管理,提高了代码的可维护性和可测试性。本文将深入介绍Spring Boot中的IoC容器,探讨IoC的基本概念、Spring Boot的IoC支持,以及如何在实际应用中利用IoC构建强大的应用。
361 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问