18,356
社区成员
发帖
与我相关
我的任务
分享
void CFile_TransferDlg::OnSocket(WPARAM wparam,LPARAM lparam)
{
CString str;
int res;
str=inet_ntoa(comaddr.sin_addr);
if(lparam==FD_READ)
{
recv(comsock,message,100,0);
if(memcmp(message,"RECEIVE1RECEIVE2RECEIVE3",sizeof("RECEIVE1RECEIVE2RECEIVE3"))==0)
{
memset(message,0,100);
str+="向您发送文件";
res=MessageBox(str+",接收OR放弃?","询问",MB_OKCANCEL);
if(res==IDOK)
{
CFile_TransferDlg::OnRecFile();
}
else if(res==IDCANCEL)
{
CFile_TransferDlg::OnDisFile();
}
}
else if(memcmp(message,"MESSAGE",7)==0)
{
memset(message,0,100);
AfxGetApp()->m_pMainWnd->SendMessage(WM_MESSAGE,0,0);
}
}
return;
}
发送函数
char sendtext[100]={0};
CString path,str,str1;
unsigned long len;
unsigned int yushu;
unsigned long num;
send(comsock,"RECEIVE1RECEIVE2RECEIVE3",sizeof("RECEIVE1RECEIVE2RECEIVE3"),0);
LOOP:
recv(comsock,sendtext,100,0);
if(memcmp(sendtext,"NO",sizeof("NO"))==0)
{
LogList.InsertString(-1,"对方拒绝接受文件");
return;
}
else if(memcmp(sendtext,"YES",sizeof("YES"))!=0)
goto LOOP;
else
{
CFileDialog sendfile(true);
if(sendfile.DoModal()==IDOK)
{
path=sendfile.GetPathName();
CFile send_file(path,CFile::modeReadWrite|CFile::typeBinary);
len=send_file.GetLength();
str.Format("%d",len);
str1="START";
str1+=str;
send(comsock,str1.GetBuffer(1),100,0);
num=len/100;
yushu=len%100;
for(unsigned long i=1;i<=num;i++)
{
memset(sendtext,0,100);
send_file.Read(sendtext,100);
send(comsock,sendtext,100,0);
}
if((i==num+1)&&(yushu!=0))
{
memset(sendtext,0,100);
send_file.Read(sendtext,yushu);
send(comsock,sendtext,yushu,0);
}
send_file.Close();
LogList.InsertString(-1,"发送完毕");
}
}
接收函数CString path,title;
char rectext[100]={0};
char len[50];
unsigned long lenth=0;
unsigned int yushu;
unsigned long num;
CFileDialog savefile(false);
if(savefile.DoModal()==IDOK)
{
path=savefile.GetPathName();
CFile recfile(path,CFile::modeReadWrite|CFile::modeCreate|CFile::typeBinary);
send(comsock,"YES",sizeof("YES"),0);
loop:
recv(comsock,rectext,100,0);
if(memcmp(rectext,"START",sizeof("START")-1)!=0)
goto loop;
else
{
memcpy(len,rectext+5,40);
lenth=atoi(len);
memset(rectext,0,100);
num=lenth/100;
yushu=lenth%100;
Sleep(10);
for(unsigned long i=1;i<=num;i++)
{
memset(rectext,100,0);
(recv(comsock,rectext,100,0);
recfile.Write(rectext,100);
}
if((i==num+1)&&(yushu!=0))
{
memset(rectext,100,0);
recv(comsock,rectext,yushu,0);
recfile.Write(rectext,yushu);
}
LogList.InsertString(-1,"接收完毕");
recfile.Close();
}
}
else if(savefile.DoModal()==IDCANCEL)
{
CFile_TransferDlg::OnDisFile() ;
}
}