亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

Windows網絡編程之winsock實現文件傳輸示例

2020-01-26 15:24:23
字體:
來源:轉載
供稿:網友

本文實例展示了Windows網絡編程中winsock實現文件傳輸的方法,對于進行Windows下的winsock網絡編程有一定的借鑒參考價值。

該程序代碼主要是基于TCP流協議的winsock網絡文件傳輸示例,采用Windows下的C語言編寫??梢詫崿F傳遞任何格式文件的文件傳輸功能。

具體實現代碼如下:

Server端代碼如下:

/*************************************************************************   > File Name: Win_Server.c   > Author: SongLee  ************************************************************************/  #include <stdio.h> #include <stdlib.h> #include <string.h> #include <WinSock2.h>  #define PORT 8087 #define SERVER_IP "127.0.0.1" #define BUFFER_SIZE 1024 #define FILE_NAME_MAX_SIZE 512 #pragma comment(lib, "WS2_32")  int main() {   // 聲明并初始化一個服務端(本地)的地址結構   sockaddr_in server_addr;   server_addr.sin_family = AF_INET;   server_addr.sin_addr.S_un.S_addr = INADDR_ANY;   server_addr.sin_port = htons(PORT);    // 初始化socket dll   WSADATA wsaData;   WORD socketVersion = MAKEWORD(2, 0);   if(WSAStartup(socketVersion, &wsaData) != 0)   {     printf("Init socket dll error!");     exit(1);   }    // 創建socket   SOCKET m_Socket = socket(AF_INET, SOCK_STREAM, 0);     if (SOCKET_ERROR == m_Socket)     {       printf("Create Socket Error!");     exit(1);     }    //綁定socket和服務端(本地)地址   if (SOCKET_ERROR == bind(m_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr)))   {     printf("Server Bind Failed: %d", WSAGetLastError());     exit(1);   }    //監聽   if (SOCKET_ERROR == listen(m_Socket, 10))   {     printf("Server Listen Failed: %d", WSAGetLastError());     exit(1);   }     while(1)   {     printf("Listening To Client.../n");      sockaddr_in client_addr;     int client_addr_len = sizeof(client_addr);      SOCKET m_New_Socket = accept(m_Socket, (sockaddr *)&client_addr, &client_addr_len);     if (SOCKET_ERROR == m_New_Socket)     {       printf("Server Accept Failed: %d", WSAGetLastError());       break;     }   char buffer[BUFFER_SIZE];  memset(buffer, 0, BUFFER_SIZE);     if (recv(m_New_Socket, buffer, BUFFER_SIZE, 0) < 0)     {       printf("Server Receive Data Failed!");       break;     }      char file_name[FILE_NAME_MAX_SIZE+1];     memset(file_name, 0, FILE_NAME_MAX_SIZE+1);     strncpy(file_name, buffer, strlen(buffer)>FILE_NAME_MAX_SIZE ? FILE_NAME_MAX_SIZE:strlen(buffer));     printf("%s/n", file_name);      FILE * fp = fopen(file_name, "rb"); //windows下是"rb",表示打開一個只讀的二進制文件     if (NULL == fp)     {       printf("File: %s Not Found/n", file_name);     }         else     {       memset(buffer, 0, BUFFER_SIZE);       int length = 0;        while ((length = fread(buffer, sizeof(char), BUFFER_SIZE, fp)) > 0)       {         if (send(m_New_Socket, buffer, length, 0) < 0)         {           printf("Send File: %s Failed/n", file_name);           break;         }         memset(buffer, 0, BUFFER_SIZE);       }        fclose(fp);       printf("File: %s Transfer Successful!/n", file_name);     }     closesocket(m_New_Socket);   }    closesocket(m_Socket);   //釋放winsock庫   WSACleanup();   return 0; } 

Client端代碼如下:

/*************************************************************************   > File Name: Win_Client.c   > Author: SongLee  ************************************************************************/  #include <stdio.h> #include <stdlib.h> #include <string.h> #include <WinSock2.h>  #define PORT 8087 #define SERVER_IP "127.0.0.1" #define BUFFER_SIZE 1024 #define FILE_NAME_MAX_SIZE 512 #pragma comment(lib, "WS2_32")  int main() {   // 初始化socket dll   WSADATA wsaData;   WORD socketVersion = MAKEWORD(2, 0);   if(WSAStartup(socketVersion, &wsaData) != 0)   {     printf("Init socket dll error!");     exit(1);   }    //創建socket   SOCKET c_Socket = socket(AF_INET, SOCK_STREAM, 0);   if (SOCKET_ERROR == c_Socket)   {     printf("Create Socket Error!");     system("pause");     exit(1);   }    //指定服務端的地址   sockaddr_in server_addr;   server_addr.sin_family = AF_INET;   server_addr.sin_addr.S_un.S_addr = inet_addr(SERVER_IP);   server_addr.sin_port = htons(PORT);    if (SOCKET_ERROR == connect(c_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr)))   {     printf("Can Not Connect To Server IP!/n");     system("pause");     exit(1);   }    //輸入文件名   char file_name[FILE_NAME_MAX_SIZE+1];   memset(file_name, 0, FILE_NAME_MAX_SIZE+1);   printf("Please Input File Name On Server: ");   scanf("%s", &file_name);    char buffer[BUFFER_SIZE];   memset(buffer, 0, BUFFER_SIZE);   strncpy(buffer, file_name, strlen(file_name)>BUFFER_SIZE ? BUFFER_SIZE:strlen(file_name));    //向服務器發送文件名   if(send(c_Socket, buffer, BUFFER_SIZE, 0) < 0)   {     printf("Send File Name Failed/n");     system("pause");     exit(1);   }    //打開文件,準備寫入   FILE * fp = fopen(file_name, "wb"); //windows下是"wb",表示打開一個只寫的二進制文件   if(NULL == fp)   {     printf("File: %s Can Not Open To Write/n", file_name);     system("pause");     exit(1);   }   else   {     memset(buffer, 0, BUFFER_SIZE);     int length = 0;     while ((length = recv(c_Socket, buffer, BUFFER_SIZE, 0)) > 0)     {       if (fwrite(buffer, sizeof(char), length, fp) < length)       {         printf("File: %s Write Failed/n", file_name);         break;       }       memset(buffer, 0, BUFFER_SIZE);     }      printf("Receive File: %s From Server Successful!/n", file_name);   }    fclose(fp);   closesocket(c_Socket);      //釋放winsock庫   WSACleanup();    system("pause");   return 0; } 

程序中備有較為詳盡的注釋,相信大家不難理解。感興趣的朋友可以根據自身需要對程序加以靈活改善,使其功能更加強大。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲va在线va天堂资源站| 一区二区三区天堂av| 九九热精品视频| 色悠悠国产精品| 蜜臀久久99精品久久久无需会员| 高清欧美性猛交| 亚洲天堂av高清| 久久成人精品电影| 欧美一级视频在线观看| 亚洲国产成人精品女人久久久| 亚洲欧洲在线视频| 日韩中文字幕久久| 欧美激情第一页xxx| 国产欧美一区二区三区在线| 亚洲国产成人在线视频| 欧美孕妇与黑人孕交| 欧美性猛交xxxx富婆弯腰| 久久天天躁夜夜躁狠狠躁2022| 久久久久久久久久av| 午夜欧美大片免费观看| 日韩电视剧在线观看免费网站| 欧美一级在线播放| 精品电影在线观看| 国产精品吹潮在线观看| 国产精品福利在线观看网址| 欧美日本精品在线| 亚洲男人av电影| 91亚洲国产成人精品性色| 韩国精品久久久999| 国产精品女主播视频| 国产综合在线观看视频| 久久精品91久久久久久再现| 亚洲毛片在线观看.| 最近2019中文字幕mv免费看| 国产精品精品国产| 亚洲国产精久久久久久| 一区三区二区视频| 欧美疯狂xxxx大交乱88av| 国产精品久久久久久久久久三级| 久久久视频在线| 亚洲国产私拍精品国模在线观看| 亚洲欧美中文日韩在线v日本| 91在线免费观看网站| 国产欧美中文字幕| xxxxxxxxx欧美| 国产精品自拍偷拍视频| 欧美国产第一页| 日韩欧美一区二区在线| 黄色成人在线免费| 亚洲丁香婷深爱综合| 国产精品1区2区在线观看| 久久亚洲精品小早川怜子66| 久久久久久成人精品| 国产精品视频在线播放| 欧美视频专区一二在线观看| 日本不卡高字幕在线2019| 91国产精品视频在线| 国产亚洲欧洲高清一区| 国产日韩欧美91| 国产精品电影在线观看| 97免费中文视频在线观看| 亚洲人成电影在线观看天堂色| 国内免费精品永久在线视频| 狠狠综合久久av一区二区小说| 亚洲黄页视频免费观看| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲欧美国产高清va在线播| 亚洲精品国产精品国自产在线| 一区二区福利视频| 亚洲国产精品福利| 中文字幕视频在线免费欧美日韩综合在线看| 色偷偷88888欧美精品久久久| 国产精品视频yy9099| 国产精品专区h在线观看| 欧美性生活大片免费观看网址| 亚洲变态欧美另类捆绑| 欧美孕妇毛茸茸xxxx| 欧美午夜视频一区二区| 91精品国产91久久久久久| 国产精品专区第二| 国产精品极品尤物在线观看| 国产精品v片在线观看不卡| 色综合91久久精品中文字幕| 欧美国产精品日韩| 91国产美女视频| 亚洲欧洲一区二区三区在线观看| 亚洲一区二区三区xxx视频| 久久影院在线观看| 最近2019年日本中文免费字幕| 色天天综合狠狠色| 欧美日韩国内自拍| 中文字幕亚洲二区| 欧美日韩不卡合集视频| 亚洲视频axxx| 亚洲欧美在线一区二区| 91九色单男在线观看| 日本免费在线精品| 国色天香2019中文字幕在线观看| 亚洲一区中文字幕在线观看| 国产在线一区二区三区| 自拍偷拍亚洲在线| 影音先锋欧美在线资源| 久久人人爽人人爽人人片av高清| 国产在线视频2019最新视频| 91亚洲va在线va天堂va国| 日韩中文字幕免费| 日韩av一区二区在线观看| 久久理论片午夜琪琪电影网| 国产一区二区丝袜高跟鞋图片| 高跟丝袜欧美一区| 亚洲一区二区三区视频播放| 在线观看日韩www视频免费| 欧美亚洲国产视频| 国色天香2019中文字幕在线观看| 国产日韩欧美视频| 国产一区二区丝袜| 亚洲精品中文字幕女同| 欧美视频免费在线| 亚洲最大福利视频| 亚洲第一精品自拍| 91sa在线看| 一区二区欧美激情| 日韩精品免费在线| 久久久免费电影| 5566日本婷婷色中文字幕97| 久久天堂电影网| 久久国产一区二区三区| 亚洲一区二区免费在线| 欧美日韩成人在线播放| 久久手机免费视频| 欧美亚洲成人xxx| 色婷婷av一区二区三区在线观看| 91成人在线视频| 亚洲一区二区三| 久久五月天综合| www.亚洲天堂| 国产欧美欧洲在线观看| 欧美超级乱淫片喷水| 成人精品视频久久久久| 在线精品国产欧美| 狠狠躁天天躁日日躁欧美| 国产成人jvid在线播放| 97香蕉久久夜色精品国产| 最近中文字幕mv在线一区二区三区四区| 日本一区二区在线免费播放| 中文字幕国产日韩| 亚洲一品av免费观看| 国产成人精品优优av| 国产精品揄拍一区二区| 91免费观看网站| 91成人国产在线观看| 日韩在线视频二区| 欧美日韩亚洲系列| 日韩电影免费观看中文字幕| 精品久久久久久电影| 久久久国产视频| 精品久久久免费| 亚洲国产成人久久| 亚洲国产精品久久久久| 亚洲精品99久久久久中文字幕| 欧美天堂在线观看| 欧美性高潮床叫视频| 国产精品久久国产精品99gif| 久久国产加勒比精品无码|