c++傳輸文件到不同計算機上的示例代碼
服務(wù)器端代碼(接收文件)
服務(wù)器端將監(jiān)聽一個端口,等待客戶端的連接,并接收客戶端發(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è)置套接字選項
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ā)送一個文件。
#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)換為二進制形式
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地址。
在實際部署時,你需要將客戶端代碼中的"127.0.0.1"替換為服務(wù)器的實際IP地址。
這些代碼示例僅用于教學(xué)目的,實際應(yīng)用中可能需要更多的錯誤處理和安全措施
到此這篇關(guān)于c++傳輸文件到不同計算機上的示例代碼的文章就介紹到這了,更多相關(guān)c++傳輸文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實現(xiàn)學(xué)生管理系統(tǒng)總結(jié)
這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07
C語言lidar_align雷達里程計校準(zhǔn)功能詳解
這篇文章主要為大家介紹了C語言lidar_align雷達里程計校準(zhǔn)功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
C/C++如何獲取當(dāng)前系統(tǒng)時間的實例詳解
這篇文章主要介紹了 C/C++如何獲取當(dāng)前系統(tǒng)時間的實例詳解的相關(guān)資料,這里提供了幾種實現(xiàn)方法,幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08
關(guān)于C語言 const 和 define 區(qū)別
這篇文章主要介紹了關(guān)于C語言 const 和 define 區(qū)別 的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容2021-09-09

