app.hEarr[app.now] = WSACreateEvent();
WSAEventSelect(app.sarr[app.now],app.hEarr[app.now],FD_ACCEPT);
app.now++;
WSANETWORKEVENTS ev;
int index;
while(1)
{
index=WSAWaitForMultipleEvents(app.now,app.hEarr,FALSE,WSA_INFINITE,FALSE);
index -= WSA_WAIT_EVENT_0;
WSAEnumNetworkEvents(app.sarr[index],app.hEarr[index],&ev);
switch(ev.lNetworkEvents)
{
case FD_ACCEPT: AcceptProc(index); break;
case FD_READ: ReadProc(index); break;
case FD_CLOSE: CloseProc(index); break;
}
}

void ReadProg(int index)
{
if(app.hFileArr[index] != INVALID_HANDLE_VALUE)
{
RecvFileFrag(index);
void RecvFileFrag(int index)
{
char buf[1000];
SOCKET sock = app.sarr[index];
DWORD dw;
recv(sock,buf,1000,0);
if(app.fsize[index] >= 1000)
{
WriteFile(app.hFileArr[index],buf,1000,&dw,0);
}Else{
WriteFile(app.hFileArr[index],buf,app.fsize[index],&dw,0);
}
app.fsize[index] = app.fsize[index] - dw;
if(app.fsize[index] == 0){
send(app.sarr[index],buf,1,0);
}
} |
}else
{
RecvFileInfo(index);//파일의 정보를 받는다.
void RecvFileInfo(int index)
{
char buf[1000];
SOCKET sock = app.sarr[index];
recv(sock,buf,1000,0);
memcpy(app.fname[index],buf,FILE_NAME_LEN);
int fattr = *((int *)(buf + FILE_NAME_LEN));
app.fsize[index] = *((int *)(buf+FILE_NAME_LEN+sizeof(int)));

app.hFileArr[index] = CreateFile(buf,GENERIC_WRITE,0,0,CREATE_ALWAYS,fattr,0);
printf("[ %s ]다운로드시작\n",app.fname[index]);
} |
}
} |