HP-Socket的新增函数SendSmallFile()的疑问
@伤神小怪兽 你好,想跟你请教个问题:
在新添加的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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
加群里面 讨论
75375912
群名称是怪兽乐园
问题太多了,简单回答:
1、SendSmallFile是连续发送
2、对接收方来说,接收文件与接收其它字节流没有任何区别
3、无论什么情况下都不建议修改源代码,否则HP-Socket一旦升级,你就很难跟着升级