好文档 - 专业文书写作范文服务资料分享网站

基于TCP的文件传输程序

天下 分享 时间: 加入收藏 我要投稿 点赞

.

{ KillTimer(1);

m_bIsWait=FALSE; //等待状态清空 //启动发送文件线程

GetDlgItem(IDC_SR)->SetWindowText(\已发送:\ pThreadSend=::AfxBeginThread(_SendThread,this); return;

}

//当发送文件请求被拒绝 if(pMsg->m_nType==REFUSE){ m_bIsWait=FALSE;

MessageBox(_T(\请求被拒绝\

_T(\警MB_ICONEXCLAMATION); return ;

}

//当对方取消文件传输时执行该if语句里面的内容 if(pMsg->m_nType == CANCEL) { m_bIsWait = FALSE; return ; }

3、文件传输模块

资料.

告\

.

两个线程:

_ListenThread():建立新的监听套接字,准备接收文件

_SendThread(): 建立客户端套接字,连接监听套接字,发送文件 当两方建立了可靠的连接,一方选择文件后,就会使用传输控制模

块给对方发送文件发送请求,对方的ProcessReceive接收到后查看当前的消息状态,(上个模块的OnReceive已经写得很清楚),同意接受后,开启文件接收线程,同时给发送方返回一个准备完成状态,于是,发送方开启文件发送线程,最后完成文件的传输工作,同时置状态m_bIsStop为TRUE,便于双方传输控制

① 发送线程关键函数SendFile

void CSendFileDlg::SendFile(CSocket& senSo)

资料.

.

{ }

m_ctrlProgress.SetRange32(0,m_dwFileSize); int nSize=0,nLen=0; DWORD dwCount = 0; char buf[BLOCKSIZE]={0}; file.Seek(0,CFile::begin); //开始传送 while(1) {

//每次读取BLOCKSIZE大小 nLen=file.Read(buf,BLOCKSIZE); m_bIsTransmitting=TRUE; CFile file;

if (!file.Open(m_strPath,CFile::modeRead|CFile::typeBinary)) {

AfxMessageBox(_T(\文件打开失败\

senSo.Close(); return ;

资料.

.

if(nLen==0)

break;

//发送文件内容

nSize=senSo.Send(buf,nLen); dwCount+=nSize;

m_ctrlProgress.SetPos(dwCount); CString strTransfersSize;

strTransfersSize.Format(\字节\//设置进度条属性

GetDlgItem(IDC_RECEIVE_SIZE)->SetWindowText(strTransf

ersSize);

int p=((double)dwCount)/((int)m_dwFileSize+1)*100+1; strTransfersSize.Format(\strTransfersSize+=\

//判断用户是否停止发送 if(m_bIsStop) { }

m_bIsStop=FALSE; break;

资料.

.

}

② 接收线程关键函数ReceiveFile

void CSendFileDlg::ReceiveFile(CSocket& recSo) {

//停止等待超时计时器 KillTimer(2); m_bIsWait=FALSE;

m_bIsTransmitting=TRUE; //正在传输置1 if(m_dwFileSize==dwCount)

AfxMessageBox(_T(\文件发送成功\ }

file.Close(); senSo.Close();

if (nSize==SOCKET_ERROR)

break;

else

AfxMessageBox(_T(\文件发送失败\

m_ctrlProgress.SetPos(0); m_bIsTransmitting = FALSE;

资料.

基于TCP的文件传输程序

.{KillTimer(1);m_bIsWait=FALSE;//等待状态清空//启动发送文件线程GetDlgItem(IDC_SR)->SetWindowText(\已发送:\pThreadSend=::AfxBeginThread(_SendTh
推荐度:
点击下载文档文档为doc格式
72ubq0k9p33pit886asl2xn8u9whcj004a6
领取福利

微信扫码领取福利

微信扫码分享