資源簡介
計算機網絡試驗,TCP文件傳輸的設計與實現,要傳輸的文件放在Debug文件夾下,cmd調用或者.exe文件使用

代碼片段和文件信息
////////////////////////////////////////
//?文件傳送客戶端??小文件123.txt???編號2號客戶端
////////////////////////////////////////
#include?
#include?
#include?
//?定義發送緩沖區大小
#define?MAX_DATA_BLOCK_SIZE?8192
void?error_exit(const?char?*?msg?int?val);
void?send_file(const?char?*?file_name?const?char?*?ip?u_short?port);
//?主函數
int?main(int?argc?char?**?argv)?{
????u_short?port;
????if?(argc?==?3)?{
????//?如果不指定服務器端口,那么默認為?8888
????send_file(argv[1]?argv[2]?8888);
????print_socket_detail(argv[1]);
????}?else?if?(argc?==?4)?{
????//?用戶指定了服務器端口
????port?=?(u_short)?atoi(argv[1]);
????if?(port?==?0)?{
????error_exit(“非法的服務器端口“?-1);
????}?else?{
????send_file(argv[1]?argv[2]?port);
????}
????}?else?{
????error_exit(“參數錯誤“?-1);
????}
????return?0;
}
void?print_socket_detail(SOCKET?s){
????struct?sockaddr_in?name;
????int?namelen;
????namelen?=?sizeof(name);
????memset(&name0namelen);
????getsockname(s(struct?sockaddr*)&name&namelen);
????printf(“peer:??%s:%d\n“inet_ntoa(name.sin_addr)ntohs(name.sin_port));
}
????//?打印錯誤、使用說明并退出程序
void?error_exit(const?char?*?msg?int?val)?{
????if?(msg)?{
????printf(“%s\n\n“?msg);
????}
????printf(“使用方法:ft_client?<文件名>?<服務器?IP?地址>?[服務器端口]\n“);
????printf(“服務器端口是可選參數,默認為?8888\n\n“);
????exit(val);
}
//?發送文件到服務器
void?send_file(const?char?*?file_name?const?char?*?ip?u_short?port)?{
????WSADATA?wsaData;
????SOCKET?s;
????FILE?*?fp;
????struct?sockaddr_in?server_addr;
????char?data[MAX_DATA_BLOCK_SIZE];
????int?i;
????int?ret;
????fp?=?fopen(file_name?“rb“);
????if?(fp?==?NULL)?{
????printf(“無法打開文件\n“);
????return;
?}
WSAStartup(0x202?&wsaData);
????//?創建套接字
????s?=?socket(AF_INET?SOCK_STREAM?0);
????//?填寫服務器的地址結構
????memset((void?*)&server_addr?0?sizeof(server_addr));
????server_addr.sin_family?=?AF_INET;
????server_addr.sin_addr.s_addr?=?inet_addr(ip);
????server_addr.sin_port?=?htons(port);
?//?連接到服務器,注意觀察是如何處理連接失敗的
????if?(connect(s?(struct?sockaddr?*)&server_addrsizeof(server_addr))?==?SOCKET_ERROR)?{
????????printf(“連接服務器失敗\n“);
????????fclose(fp);
????????closesocket(s);
????????WSACleanup();
????????return;
????}
????//?首先發送文件名以及標志文件名結束的\0
????printf(“發送文件名...\n“);
????send(s?file_name?strlen(file_name)?0);
????send(s?“\0“?1?0);
????//?然后發送文件內容
????//?注意觀察緩沖區?data?是如何使用的,以及?fread、send?函數的返回值是如何處理的
????printf(“發送文件內容“);
????for?(;;)?{
????????memset((void?*)data?0?sizeof(data));
????????i?=?fread(data?1?sizeof(data)?fp);
????????if?(i?==?0)?{
????????printf(“\n?發送成功\n“);
????????break;
????????}
????ret?=?send(s?data?i?0);
????putchar(‘.‘);
????if?(ret?==?SOCKET_ERROR)?{
????????printf(“\n?發送失敗,文件可能不完整\n“);
????????break;
????????}
?}
????fclose(fp);
????closesocket(s);
????WSACleanup();
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-03-28?19:02??TCP文件傳輸的設計與實現\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\client\
?????文件???????????0??2018-11-25?22:02??TCP文件傳輸的設計與實現\11.26\test\client\123.txt
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\client\bin\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\client\bin\Debug\
?????文件???????39038??2018-11-26?09:01??TCP文件傳輸的設計與實現\11.26\test\client\bin\Debug\client.exe
?????文件???????????0??2018-11-26?08:35??TCP文件傳輸的設計與實現\11.26\test\client\bin\Debug\ly.txt
?????文件????????1212??2018-11-28?16:41??TCP文件傳輸的設計與實現\11.26\test\client\client.cbp
?????文件?????????267??2018-11-27?13:04??TCP文件傳輸的設計與實現\11.26\test\client\client.depend
?????文件?????????356??2018-11-28?16:41??TCP文件傳輸的設計與實現\11.26\test\client\client.layout
?????文件????????3080??2018-11-27?13:04??TCP文件傳輸的設計與實現\11.26\test\client\main.c
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\client\obj\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\client\obj\Debug\
?????文件????????6223??2018-11-27?13:04??TCP文件傳輸的設計與實現\11.26\test\client\obj\Debug\main.o
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\server\
?????文件???????????0??2018-11-26?11:58??TCP文件傳輸的設計與實現\11.26\test\server\123.txt
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\server\bin\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\server\bin\Debug\
?????文件???????38076??2018-11-26?08:51??TCP文件傳輸的設計與實現\11.26\test\server\bin\Debug\server.exe
?????文件????????4480??2018-11-27?20:54??TCP文件傳輸的設計與實現\11.26\test\server\main.c
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\server\obj\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\test\server\obj\Debug\
?????文件????????6749??2018-11-27?20:54??TCP文件傳輸的設計與實現\11.26\test\server\obj\Debug\main.o
?????文件????????1161??2018-11-25?20:50??TCP文件傳輸的設計與實現\11.26\test\server\server.cbp
?????文件?????????361??2018-11-26?11:54??TCP文件傳輸的設計與實現\11.26\test\server\server.depend
?????文件?????????358??2018-11-27?20:58??TCP文件傳輸的設計與實現\11.26\test\server\server.layout
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\多線程\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\多線程\client\
?????目錄???????????0??2019-03-28?19:01??TCP文件傳輸的設計與實現\11.26\多線程\client\bin\
............此處省略36個文件信息
評論
共有 條評論