簡單檔案傳輸

2021-05-27 07:08:17 字數 2199 閱讀 1449

-----原理:

檔案傳輸的原理其實很簡單,服務端先在某個埠監聽,等待客戶端的連線,連線成功後,服務端開啟指定的檔案,然後讀取檔案,再通過建立的套接字傳送給客戶端。如果要實現乙個服務端能與多個客戶端連線,則需要用到多執行緒,下面給出一對一的實現**,有興趣的朋友可以用多執行緒實現一對多。

-----程式**:

#include #include #include #include #include #include #include #include using namespace std;

//./fileserver 2000 hahaya.txt 其中2000為埠號,hahaya.txt為檔名

int main(int argc, char *argv)

struct sockaddr_in serveraddr;

bzero(&serveraddr, sizeof(serveraddr));

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(atoi(argv[1]));

serveraddr.sin_addr.s_addr = htonl(inaddr_any);

if(bind(sk, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) != 0)

listen(sk, 5);

struct sockaddr_in clientaddr;

bzero(&clientaddr, sizeof(clientaddr));

size_t len = sizeof(clientaddr);

int talk = accept(sk, (struct sockaddr*)&clientaddr, &len);

//開啟檔案並準備傳送

cout << "server ready..." << endl;

file *fp = fopen(argv[2], "r+");

int size = 0;

char buff[1024] = ;

while((size = fread(buff, 1, sizeof(buff), fp)) > 0)

cout << "send success..." << endl;

fclose(fp);

close(talk);

close(sk);

return 0;

}#include #include #include #include #include #include #include #include using namespace std;

//./clientserver 192.168.0.1 2000 hahaya.txt

int main(int argc, char *argv)

struct sockaddr_in serveraddr;

bzero(&serveraddr, sizeof(serveraddr));

serveraddr.sin_family = af_inet;

serveraddr.sin_port = htons(atoi(argv[2]));

serveraddr.sin_addr.s_addr = inet_addr(argv[1]);

connect(sk, (struct sockaddr*)&serveraddr, sizeof(serveraddr));

file *fp = fopen(argv[3], "w+");

char buff[1024] = ;

int len = 0;

cout << "begin recv..." << endl;

while((len = recv(sk, buff, sizeof(buff), 0)) > 0)

cout << "file success..." << endl;

close(sk);

fclose(fp);

return 0;

}

-----程式執行:

開啟服務端: ./fileserver 2000 ./eclipse.zip

開啟客戶端: ./fileclient 192.168.254.128 2000 ./test.zip

------效果截圖:

傳輸完成後的test.zip檔案可以解壓,傳輸成功。

簡單C Tcp檔案傳輸

using system using system.net using system.net.sockets using system.io namespace win 連線使用 tcp 協議的服務端 服務端的ip位址 服務端的埠號 public static socket connectserve...

TFTP 簡單檔案傳輸協議

1.tftp trivial file transfer protocol 簡單檔案傳輸協議 與ftp不同的是,它使用的是udp的69埠,因此它可以穿越許多防火牆。不過它也有缺點,比如傳送不可靠 沒有密碼驗證等。非常適合傳送小型檔案的 2.配置tftp ecgl linux 自帶 tftp serv...

QT檔案傳輸(簡單版)

qt檔案傳輸 簡單版 這是用qt寫的一篇簡單的檔案傳輸,只是考慮了黏包問題,並沒有考慮進度條和執行緒問題 pro中加network 標頭檔案 qtcpsocket通訊套接字 qtcpserver監聽套接字 qfile 檔案操作 qtimer定時器 防止黏包 函式 fileserver 建構函式 fi...