c++传输文件到不同计算机上的示例代码

 更新时间:2024年03月06日 11:57:13   作者:飞翔公园11223  
这篇文章主要为大家详细介绍了c++传输文件到不同计算机上的相关知识,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下

服务器端代码(接收文件)

服务器端将监听一个端口,等待客户端的连接,并接收客户端发送的文件。

#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

#define PORT 8080
#define BUFFER_SIZE 4096

int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE] = {0};
std::ofstream outfile(“received_file”, std::ios::binary);

// 创建套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
    perror("socket failed");
    exit(EXIT_FAILURE);
}

// 设置套接字选项
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
    perror("setsockopt");
    exit(EXIT_FAILURE);
}

address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);

// 绑定套接字到端口
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
    perror("bind failed");
    exit(EXIT_FAILURE);
}

// 监听端口
if (listen(server_fd, 3) < 0) {
    perror("listen");
    exit(EXIT_FAILURE);
}

// 接受客户端连接
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
    perror("accept");
    exit(EXIT_FAILURE);
}

// 接收文件数据并写入文件
int bytes_read;
while ((bytes_read = read(new_socket, buffer, BUFFER_SIZE)) > 0) {
    outfile.write(buffer, bytes_read);
}

std::cout << "File received successfully.\n";

// 关闭套接字和文件
outfile.close();
close(new_socket);
close(server_fd);

return 0;

客户端代码(发送文件)

客户端将连接到服务器端的IP地址和端口,并发送一个文件。

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define PORT 8080
#define BUFFER_SIZE 4096

int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char buffer[BUFFER_SIZE] = {0};
std::ifstream infile(“file_to_send”, std::ios::binary);

if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
    std::cerr << "\n Socket creation error \n";
    return -1;
}

serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);

// 将IPv4地址从文本转换为二进制形式
if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
    std::cerr << "\nInvalid address/ Address not supported \n";
    return -1;
}

if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
    std::cerr << "\nConnection Failed \n";
    return -1;
}

// 读取文件并发送
while (infile.read(buffer, BUFFER_SIZE)) {
    send(sock, buffer, infile.gcount(), 0);
}

// 发送文件的最后一部分(如果有)
if (infile.gcount() > 0) {
    send(sock, buffer, infile.gcount(), 0);
}

std::cout << "File sent successfully.\n";

// 关闭套接字和文件
infile.close();
close(sock);

return 0;
}

注意:

这些示例代码假设服务器和客户端都在同一网络中,并且客户端知道服务器的IP地址。

在实际部署时,你需要将客户端代码中的"127.0.0.1"替换为服务器的实际IP地址。

这些代码示例仅用于教学目的,实际应用中可能需要更多的错误处理和安全措施

到此这篇关于c++传输文件到不同计算机上的示例代码的文章就介绍到这了,更多相关c++传输文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一起来了解一下C++的结构体 struct

    一起来了解一下C++的结构体 struct

    这篇文章主要为大家详细介绍了C++的结构体struct,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++中的数组引用和指针引用

    C++中的数组引用和指针引用

    这篇文章主要介绍了C++中的数组引用和指针引用详细的相关资料,需要的朋友可以参考下面文章内容
    2021-09-09
  • 基于C语言实现五子棋游戏

    基于C语言实现五子棋游戏

    这篇文章主要为大家详细介绍了基于C语言实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C语言深入讲解内存操作问题

    C语言深入讲解内存操作问题

    程序运行的目的是为了得到特定的结果,计算机本质上是用于计算的,既然是用于计算,就需要参与计算的数据,那这些数据就存储在内存中,计算之前参与运算的数据以及运算之后得到的数据,都存储在内存中,所以对内存操作的掌握就尤为重要,下面我们一起来看看
    2022-04-04
  • C/C++实现图书信息管理系统

    C/C++实现图书信息管理系统

    这篇文章主要为大家详细介绍了c/c++实现图书信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 讲解C++中的枚举类型以及声明新类型的方法

    讲解C++中的枚举类型以及声明新类型的方法

    这篇文章主要介绍了讲解C++中的枚举类型以及声明新类型的方法,是C预言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言实现的一个三子棋游戏详解流程

    C语言实现的一个三子棋游戏详解流程

    三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了
    2021-10-10
  • C语言矩阵连乘 (动态规划)详解

    C语言矩阵连乘 (动态规划)详解

    这篇文章主要介绍了C语言矩阵连乘 (动态规划)详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++调用libcurl开源库实现邮件的发送功能流程详解

    C++调用libcurl开源库实现邮件的发送功能流程详解

    libcurl是一个免费开源的网络传输库,支持ftp、ftps、tftp,http、https、telnet、ldap、pop3、smtp等多种协议,接下来让我们一起来了解吧
    2021-11-11
  • C语言超详细讲解文件的操作

    C语言超详细讲解文件的操作

    C语言文件操作的方法有很多,函数也有很多你知道哪些呢?下面是小编为大家带来的C语言文件操作的方法,欢迎阅读
    2022-04-04

最新评论