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

发布于 2021-11-24 19:34:18 字数 1494 浏览 838 评论 2

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

在新添加的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

百思不得你姐 2021-11-27 16:32:01

加群里面 讨论
75375912

群名称是怪兽乐园

飘然心甜 2021-11-26 16:38:16

问题太多了,简单回答:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文