c++傳輸文件到不同計(jì)算機(jī)上的示例代碼
服務(wù)器端代碼(接收文件)
服務(wù)器端將監(jiān)聽一個(gè)端口,等待客戶端的連接,并接收客戶端發(fā)送的文件。
#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); // 創(chuàng)建套接字 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 設(shè)置套接字選項(xiàng) 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); } // 監(jiān)聽端口 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); } // 接收文件數(shù)據(jù)并寫入文件 int bytes_read; while ((bytes_read = read(new_socket, buffer, BUFFER_SIZE)) > 0) { outfile.write(buffer, bytes_read); } std::cout << "File received successfully.\n"; // 關(guān)閉套接字和文件 outfile.close(); close(new_socket); close(server_fd); return 0;
客戶端代碼(發(fā)送文件)
客戶端將連接到服務(wù)器端的IP地址和端口,并發(fā)送一個(gè)文件。
#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地址從文本轉(zhuǎn)換為二進(jìn)制形式 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; } // 讀取文件并發(fā)送 while (infile.read(buffer, BUFFER_SIZE)) { send(sock, buffer, infile.gcount(), 0); } // 發(fā)送文件的最后一部分(如果有) if (infile.gcount() > 0) { send(sock, buffer, infile.gcount(), 0); } std::cout << "File sent successfully.\n"; // 關(guān)閉套接字和文件 infile.close(); close(sock); return 0; }
注意:
這些示例代碼假設(shè)服務(wù)器和客戶端都在同一網(wǎng)絡(luò)中,并且客戶端知道服務(wù)器的IP地址。
在實(shí)際部署時(shí),你需要將客戶端代碼中的"127.0.0.1"替換為服務(wù)器的實(shí)際IP地址。
這些代碼示例僅用于教學(xué)目的,實(shí)際應(yīng)用中可能需要更多的錯(cuò)誤處理和安全措施
到此這篇關(guān)于c++傳輸文件到不同計(jì)算機(jī)上的示例代碼的文章就介紹到這了,更多相關(guān)c++傳輸文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)學(xué)生管理系統(tǒng)總結(jié)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07C語(yǔ)言lidar_align雷達(dá)里程計(jì)校準(zhǔn)功能詳解
這篇文章主要為大家介紹了C語(yǔ)言lidar_align雷達(dá)里程計(jì)校準(zhǔn)功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03C/C++如何獲取當(dāng)前系統(tǒng)時(shí)間的實(shí)例詳解
這篇文章主要介紹了 C/C++如何獲取當(dāng)前系統(tǒng)時(shí)間的實(shí)例詳解的相關(guān)資料,這里提供了幾種實(shí)現(xiàn)方法,幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08關(guān)于C語(yǔ)言 const 和 define 區(qū)別
這篇文章主要介紹了關(guān)于C語(yǔ)言 const 和 define 區(qū)別 的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容2021-09-09簡(jiǎn)明的C++函數(shù)指針學(xué)習(xí)教程
這篇文章主要介紹了C++函數(shù)指針的學(xué)習(xí)教程,講到了函數(shù)指針的定義及把指針作為函數(shù)參數(shù)進(jìn)行傳遞的用法,需要的朋友可以參考下2016-04-04