FD_WRITE:表示你现在可以写数据了
FD_READ:表示现在有数据到了
FD_READ:表示现在有数据到了
解决方案 »
- 多线程为何突然中断。
- 如何实现树形控件可编辑状态
- 求URLDownloadToFile下载文件显示进度写法!
- 用什么编写.ocx啊?谢谢!
- 編譯到CList<PANELDATA,PANELDATA&> m_PanelList(255); 出現error C2059: syntax error : 'constant'。
- 如何实现该操作?在线等.........
- 获取屏幕图像,保存成bmp图像,怎样设置被保存文件的位数
- 谁要《windows程序设计》----贱卖!与我联系!上下册,100元
- “C++之父中国行”系列活动全部免费开放!
- 怎么在Ctime类型的控件中显示时间
- 如何对话框上的 Toolbar中的内容呈多列排列?
- dl程序中动态和静态链接MFC的不同
你好!
能否把你的EMAIL告诉我,我把源代码寄过来
怎么做吗?你可给我发个Email来,把你的出问题的代码给我。
我可以把整个源程序都发给你吗?
客户端:(发送文件)
int signal=0;
int namelength;
int filelen=0;
void CClientSocket::OnSend(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
CFile file;
CFileException e;
if(!file.Open(strEditFile,CFile::modeRead,&e)){
#ifdef _DEBUG
afxDump<<"file couldn't be opened"<<e.m_cause<<"\n";
#endif
}
if(signal==0)
{
FileName=file.GetFileName();
namelength=FileName.GetLength();
char lpbuflength[1];
memset(lpbuflength,0,sizeof(lpbuflength));
lpbuflength[0]=(char)namelength;
Send(lpbuflength,1,0);
signal++;
AsyncSelect(FD_WRITE);
return;
}
if(signal==1)
{
//int namelength=FileName.GetLength();
int x=Send((LPCTSTR)FileName,namelength,0);
if(x==SOCKET_ERROR)
{
AsyncSelect(FD_WRITE);
//::Sleep(250);
return;
}
signal++;
AsyncSelect(FD_WRITE);
return;
}
if(signal==2)
{
int length;
BOOL flag;
flag=TRUE;
BOOL flagerror;
flagerror=TRUE;
while(flagerror){
while(flag){
file.Seek((long)filelen,CFile::begin);
length=file.Read(lpbuf,1000);
if(length==1000){
int x=Send(lpbuf,length,0);
if(x==SOCKET_ERROR){
flagerror=FALSE;
//::Sleep(500);
AsyncSelect(FD_WRITE);
return;
}
filelen=filelen+x;
length=0;
memset(lpbuf,0,sizeof(lpbuf));
}
else{
int y=Send(lpbuf,length,0);
if(y==SOCKET_ERROR){
flagerror=FALSE;
//::Sleep(500);
AsyncSelect(FD_WRITE);
return;
}
filelen=filelen+y;
length=0;
memset(lpbuf,0,sizeof(lpbuf));
flag=FALSE;
AfxMessageBox("transmit finished!!");
return;
}
}
}
}
file.Close();
CAsyncSocket::OnSend(nErrorCode);
}
服务端:(接收文件)
int signal=0;
char* lpbuflength;
char* lpbufname;
void CMainFrame::OnUserReceive()
{
if(signal==0)
{
lpbuflength=new char[1];
memset(lpbuflength,0,1);
m_ConnectedSocket.Receive(lpbuflength,1,0);
signal++;
return;
}
if(signal==1)
{
lpbufname=new char[256];
memset(lpbufname,0,256);
int x=m_ConnectedSocket.Receive(lpbufname,(int)lpbuflength[0],0);
signal++;
return;
}
if(signal==2)
{
strcat(FilePath,lpbufname);
delete lpbuflength;
delete lpbufname;
CFileException e;
CFile file;
if(!file.Open(FilePath,CFile::modeCreate and CFile::modeWrite and CFile::modeNoTruncate,&e))
{
#ifdef _DEBUG
afxDump<<"File Could Not Be Opened!"<<e.m_cause<<"\n";
#endif
} char lpbuf[1000];
memset(lpbuf,0,sizeof(lpbuf));
int length;
BOOL flag2=TRUE;
do{
length=m_ConnectedSocket.Receive((void*lpbuf,1000,0);
file.Write(lpbuf,length);
if(length!=1000)
flag2=FALSE;
}
while(flag2);
file.Close();
}
}
请问怎样把文件分块发送???在csocket中是用archive来发送文件块吗?????