HP-Socket的新增函数SendSmallFile()的疑问

朱标 发布于 2014/08/22 11:54
阅读 1K+
收藏 0

@伤神小怪兽 你好,想跟你请教个问题:

在新添加的SendSmallFile中存在一个疑问,sendSmallFile的工作原理是不是文件分片发送,first加上头标识,last加上尾标识,mid直接发送?如果是多个客户端同时上传的时候,文件就比较难区分了.同时SendSmallFile和其他消息一样又是通过OnReceive接收的,所以,我是不是需要修改源码让每部分的分片的头部和尾部都添加一个MD5作为区分?还是用添加一个独立的接收函数?还是修改SendPackets让它带标识?还是本来就有办法实现?

还有就是按照SendSmallFile修改成一个加密流媒体输出函数的难度会不会太大?直接用其他东西实现会不会简单点?


BOOL CTcpClient::SendSmallFile(LPCTSTR lpszFileName, const LPWSABUF pHead, const LPWSABUF pTail)
{
ASSERT(lpszFileName != nullptr);
CAtlFile file;
HRESULT hr = file.Create(lpszFileName, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING);
if(SUCCEEDED(hr))
{
ULONGLONG ullLen;
hr = file.GetSize(ullLen);
if(SUCCEEDED(hr))
{
if(ullLen > 0 && ullLen <= MAX_SMALL_FILE_SIZE)
{
CAtlFileMapping<> fmap;
hr = fmap.MapFile(file);
if(SUCCEEDED(hr))
{
WSABUF bufs[3] = {0};
bufs[1].len = (ULONG)ullLen;
bufs[1].buf = fmap;//中间数据
if(pHead) memcpy(&bufs[0], pHead, sizeof(WSABUF));//头部标识
if(pTail) memcpy(&bufs[2], pTail, sizeof(WSABUF));//尾部标识
return SendPackets(bufs, 3);//批量发送
}
}
else if(ullLen == 0)
hr = HRESULT_FROM_WIN32(ERROR_FILE_INVALID);
else
hr = HRESULT_FROM_WIN32(ERROR_FILE_TOO_LARGE);
}
}
SetLastError(SE_INVALID_PARAM, __FUNCTION__, hr & 0x0000FFFF);
return FALSE;
}

加载中
0
伤神小怪兽
伤神小怪兽

问题太多了,简单回答:

1、SendSmallFile是连续发送
2、对接收方来说,接收文件与接收其它字节流没有任何区别
3、无论什么情况下都不建议修改源代码,否则HP-Socket一旦升级,你就很难跟着升级

0
泥瓦匠BYSocket
泥瓦匠BYSocket
加群里面 讨论 75375912


群名称是怪兽乐园
  753759
群名称是怪兽乐园
 7537591212


返回顶部
顶部