資源簡介
用的C語言socket實現的文件下載。服務器多線程。客戶端有命令參數控制,有下載文件大小。進度條等

代碼片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
using?namespace?std;
#pragma?comment(lib“Ws2_32.lib“)
#define?DEFAULT_BUFLEN?512
#define?DEFAULT_PORT???5150
#define?BUFFER_SIZE?4096
int?main(int?argc?TCHAR*?argv[])
{
int iResultrec;
WSADATA wsaData;
HANDLE?hout;
ofstream????outfile;
SOCKET?ConnectSocket?=?INVALID_SOCKET;
struct?sockaddr_in?clientService;
char sendbuf[DEFAULT_BUFLEN]?=?““;
char szBuffer[BUFFER_SIZE];
BOOL issend?=?true;
//初始化Windows?Sockets?DLL
if(iResult?=?WSAStartup(MAKEWORD(22)&wsaData)?!=?NO_ERROR)
{
printf(“WSAStartup?failed?with?error?:?%d\n“iResult);
return?-1;
}
//創建socket
ConnectSocket?=?socket(AF_INETSOCK_STREAMIPPROTO_TCP);
if(ConnectSocket?==?INVALID_SOCKET)
{
printf(“socket?failed?with?error?:?%d\n“WSAGetLastError());
WSACleanup();
return?-1;
}
////////////////////
?char?addr[20];
???int?prot?;
???printf(“現在運行的是客戶端!\n“);
???printf(“**************************************************************\n“);
???printf(“請輸入服務器的IP地址:“);
???scanf(“%s“addr);
???printf(“請輸入服務器的端口:“);
????scanf(“%d“&prot);
///////////////////
//設置目的網絡地址并連接服務器
clientService.sin_family?=?AF_INET;
clientService.sin_addr.s_addr?=?inet_addr(addr);
clientService.sin_port?=?htons(prot);
iResult?=?connect(ConnectSocket(SOCKADDR*?)&clientServicesizeof(clientService));
if(iResult?==?SOCKET_ERROR)
{
printf(“connect?failed?with?error?:?%d\n“WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return?-1;
}
printf(“connect?with?server?successfully!!!\n“);
hout?=?GetStdHandle(STD_OUTPUT_HANDLE);??
?SetConsoleTextAttribute(hout??
????????????????????????????FOREGROUND_GREEN);???
cout<<“輸入命令:*******************?help?獲取命令提示**********************:\n“;
while(true)
{
//輸入命令:
char?cmd?[20];
char?help?[10]?=“help“;
char?exit?[10]?=“exit“;
char?get?[10]?=“get“;
char?dir?[10]?=“dir“;
char?quit?[10]?=“quit“;
char?dirs?[30];
scanf(“%s“&cmd);
printf(“輸入的命令是%s\n“cmd);
if(strcmp(cmdhelp)==0){
?
?
printf(“命令參數:\n?help----------獲取命令幫助\n?dir----------獲取文件目錄\n?get----------下載文件\n?exit----------退出\n“);
continue;
}
// 列目錄
if(strcmp(cmddir)==0){
iResult?=?send(ConnectSocketdirstrlen(dir)0);
if(SOCKET_ERROR?==?iResult)
{
printf(“send?failed?with?error?:?%d\n“WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return?-1;
}
//接收傳過來的目錄
SetConsoleTextAttribute(hout??
????????????????????????????FOREGROUND_GREEN?|???
????????????????????????????FOREGROUND_BLUE);??
printf(“**********************文件目錄**********************\n“);
while(true){
ZeroMemory(dirs30);
iResult?=?recv(ConnectSocketdirs300);
//數據發送完成就跳出循環,結束時,服務器發過來quit
if(strcmp(dirsquit)==0){break;}
el
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-11-21?21:13??顏色版\
?????文件?????????191??2016-11-07?21:11??顏色版\allfiles.txt
?????文件????????6728??2016-11-07?21:10??顏色版\client.cpp
?????文件????????3401??2016-11-07?21:10??顏色版\client.dsp
?????文件?????????520??2016-11-07?21:24??顏色版\client.dsw
?????文件???????41984??2016-11-07?21:24??顏色版\client.ncb
?????文件???????48640??2016-11-07?21:24??顏色版\client.opt
?????文件?????????754??2016-11-07?21:10??顏色版\client.plg
?????目錄???????????0??2016-11-21?21:13??顏色版\Debug\
?????文件?????????168??2016-11-07?20:03??顏色版\Debug\allfiles.txt
?????文件??????561241??2016-11-07?21:10??顏色版\Debug\client.exe
?????文件??????822028??2016-11-07?21:10??顏色版\Debug\client.ilk
?????文件??????187959??2016-11-07?21:10??顏色版\Debug\client.obj
?????文件?????1147904??2016-11-07?21:10??顏色版\Debug\client.pdb
?????文件??????565337??2016-11-07?21:09??顏色版\Debug\server.exe
?????文件??????840276??2016-11-07?21:09??顏色版\Debug\server.ilk
?????文件??????204347??2016-11-07?21:09??顏色版\Debug\server.obj
?????文件?????1164288??2016-11-07?21:09??顏色版\Debug\server.pdb
?????文件??????214016??2016-11-07?21:10??顏色版\Debug\vc60.idb
?????文件??????143360??2016-11-07?21:10??顏色版\Debug\vc60.pdb
?????文件???????????0??2016-10-31?20:37??顏色版\get
?????文件????????6182??2016-11-07?21:21??顏色版\server.cpp
?????文件????????3401??2016-11-07?21:09??顏色版\server.dsp
?????文件?????????520??2016-11-07?21:21??顏色版\server.dsw
?????文件???????41984??2016-11-07?21:21??顏色版\server.ncb
?????文件???????48640??2016-11-07?21:21??顏色版\server.opt
?????文件?????????754??2016-11-07?21:09??顏色版\server.plg
評論
共有 條評論