日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux——客户端服务器文件传输

發布時間:2025/3/11 linux 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux——客户端服务器文件传输 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現文件傳輸并不難,只需用fopen、fread、fwrite、fclose這幾個函數對文件操作即可。文本文件就不說了,我們就已下圖為例。

我們先來看看這個圖片文件里裝的是什么,我們以notpad++打開這個圖片,結果如下,是一堆亂碼。

我們在已二進制方式打開,方式如下:
首先打開vs的一個項目

選擇一張圖片


這張圖片添加到源文件后,右鍵這張圖片,選擇打開方式

選擇二進制編輯器

結果如下

圖片文件是以二進制方式存儲的,因為二進制更加節省空間,所以我們在用fopen函數時注意都要以二進制的形式讀或寫。

我們以客戶端作發送方,服務器作接收方,先在客戶端的源碼目錄下放一張圖片123.jpg,啟動服務器后在啟動客戶端,便在服務器的目錄下產生一張與123.jpg一樣的圖片456.jpg。

服務器

#include <sys/socket.h> #include <unistd.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <netinet/in.h> int main() {struct sockaddr_in sock;memset(&sock,0,sizeof(sock));sock.sin_family=AF_INET;sock.sin_port=htons(5188);sock.sin_addr.s_addr=htonl(INADDR_ANY);int sockid=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);const int on=1;setsockopt(sockid,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));if(bind(sockid,(struct sockaddr *)&sock,sizeof(sock))<0){printf("bind\n");return 0;}if(listen(sockid,SOMAXCONN)<0){printf("listen\n");return 0;}struct sockaddr_in other_sock;socklen_t other_socklen=sizeof(other_sock);int client_sockid=accept(sockid,(struct sockaddr *)&other_sock,&other_socklen);printf("ip=%s,port=%d\n",inet_ntoa(other_sock.sin_addr),ntohs(other_sock.sin_port));FILE *fp=fopen("456.jpg","wb");char receive[4096]={0};int r_size=0;while(1){memset(receive,0,sizeof(receive));if((r_size=read(client_sockid,receive,sizeof(receive)))==0)//讀取文件內容,如果客戶端已全部發送,則read返回0,因為客戶端發送完后就退出{printf("已成功接收\n");break;}fwrite(receive,1,r_size,fp);//讀了多少數據就往文件里寫多少數據}close(client_sockid);close(sockid);fclose(fp);return 0; }

客戶端

#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> int main() {struct sockaddr_in sock;memset(&sock,0,sizeof(sock));sock.sin_family=AF_INET;sock.sin_port=htons(5188);sock.sin_addr.s_addr=inet_addr("***");//服務器ipint sockid=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);socklen_t socklen=sizeof(sock);connect(sockid,(struct sockaddr *)&sock,socklen);FILE *fp=fopen("123.jpg","ab");char send[4096]={0};int r_size;while(!feof(fp))//判斷文件指針是否到達文件末尾{r_size=fread(send,1,sizeof(send),fp);//讀取文件數據write(sockid,send,r_size);//讀多少數據就發多數據給服務器memset(send,0,strlen(send));}printf("發送成功\n");close(sockid);fclose(fp);return 0; }

用這個辦法不僅可以傳輸文件,還可以傳輸視頻文件,只需把文件名稱更改一下即可

總結

以上是生活随笔為你收集整理的linux——客户端服务器文件传输的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。