文件上传下载
2012-05-16 10:16:07 来源:WEB开发网核心提示:MFC实现 C/S模式 文件传输用的UDP传输,对文件UDP做了一点点安全校验 这是刚进公司培训的作业,文件上传下载, 一周完成, 所以很粗糙DWORD CUDPServerSock::DownLoad(){char szIP[20];char szSend[SEND_MAX_SIZE+1] = {0};szSend[
MFC实现
C/S模式
文件传输用的UDP传输,对文件UDP做了一点点安全校验
这是刚进公司培训的作业, 一周完成, 所以很粗糙
DWORD CUDPServerSock::DownLoad()
{
char szIP[20];
char szSend[SEND_MAX_SIZE+1] = {0};
szSend[0] = S_DOWNLOAD_FILE_UDP;
char *p = szSend;
strcpy(szIP, m_szSendIP);
if (!m_downFIsOpen)
{
m_downFIsOpen = TRUE;
int err = m_downFile.Open(m_szDownRoute, CFile::modeRead);
if(0 == err)
{
szSend[1] = (char)127; //127作为错误验证
p = p + 2;
strcpy(p, "=t=DONE=w=");
SendTo(szSend, strlen(szSend)+1, szIP);
return 1;
}
}
int nRet = 0;
szSend[1] = 1; //从1开始
p = szSend + 2;
nRet = m_downFile.Read(p, SEND_MAX_SIZE-1);
memcpy(m_szLastBuf, szSend, SEND_MAX_SIZE+1); //保存这次发送的数据,错误的话重发;
SendTo(szSend, nRet+2, szIP);
return 0;
}
void CUDPServerSock::ContimueDownLoad(LPCSTR szRecv, LPCSTR szIP)
{
static char num = 1;
char szSend[SEND_MAX_SIZE+1] = {0};
szSend[0] = S_DOWNLOAD_FILE_UDP;
char *p = szSend + 2;
if (!m_downFIsOpen)
return;
char k = szRecv[0];
if (127 == k)
{
num = 1;
m_downFIsOpen = FALSE;
m_downFile.Close();
return;
}
if (num == 126)
num = 0;
if (k == num+1)
{
num ++;
szSend[1] = num;
int nRet = m_downFile.Read(p, SEND_MAX_SIZE-1);
memcpy(m_szLastBuf, szSend, SEND_MAX_SIZE+1); //保存这次发送的数据,错误的话重发;
SendTo(szSend, nRet+2, szIP);
}
else
SendTo(m_szLastBuf, strlen(m_szLastBuf)+1, szIP);
}
更多精彩
赞助商链接
