在尝试多线程传输文件时出现的问题,帮忙看看。
#define _CRT_SECURE_NO_WARNINGS 1
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#pragma comment(lib,"ws2_32.lib")
#include<iostream>
using namespace std;
struct FileName {//用来存储和传输文件名扩展名的结构体
char Fname[64];
int len;
};
sockaddr_in sa,sc;
int client;
unsigned int threadID;
char buff[10005];
char p[] = "C:\\Users\\apple\\Desktop\\";
const char * endpath;
FILE *fp;
FileName fn;
unsigned int __stdcall RecieveFile(PVOID PM)
{
char p[64];
strncpy(p,TEXT(endpath),sizeof(endpath));
int len = strlen(p);
if (p[len - 1] != '\\')
{
p[len] = '\\';
len++;
}
recv(client, (char*)&fn, sizeof(fn),0);
strcat(p, fn.Fname);
long long siz;
recv(client, (char*)&siz, sizeof(siz), 0);
siz = siz / 10005;
cout << endpath << endl;
fp = fopen(endpath, "wb+");
long long int index = 0;
int num;
while (index<=siz)
{
num = recv(client, buff, 10005, 0);
if (num <= 0)
{
cout << num << endl;
cout << WSAGetLastError() << endl;
break;
}
fwrite(buff, (int)num, 1, fp);
cout << "write:" << GetLastError() << endl;
fclose(fp);
index++;
cout << (int)index * 100 / siz << num<<endl;
}
printf("success\n");
return 0;
}
int main()
{
SOCKET msock,ssock;
WSADATA WSAData;
WSAStartup(MAKEWORD(2, 2), &WSAData);
msock = socket(PF_INET, SOCK_STREAM, 0);
sa.sin_family = AF_INET;
sa.sin_port = htons(3000);
sa.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
bind(msock, (struct sockaddr *)&sa, sizeof(sa));
listen(msock,5);
int alen;
char te[1005];
long long number = 0;
while(1)
{
alen = sizeof(struct sockaddr);
ssock = accept(msock, (struct sockaddr *)&sa, &alen);
number++;
string temppath = p + string(itoa(number,te,10)) + ".vir";
endpath = temppath.c_str();
(HANDLE)_beginthreadex(NULL, 0,RecieveFile,NULL, 0, &threadID);
}
system("pause");
}
GetLastError报错全是10388,peroor居然说没有问题。