Socket批量传输问题

younghust 2005-09-26 04:18:05
用Socket传输时一次只能传一定的数据,我想将传输的数据放到一个结构体当中,然后分
批传输,每次1024个字节
Send:
CSocket sockRecv;
DATA Data;
DWORD dw;
DWORD dwRead=0;
while (dwRead<sizeof(INFO))
{
if(dwRead<sizeof(DATA)-1024)
dw=1024;
else
dw=sizeof(DATA)-dwRead;
sockRecv.Send(&Data+dwRead,dw);
dwRead+=dw;
}
sockRecv.Send(&Data+dwRead,ShareMemory-dwRead);
Receive: CSocket sockClient;
DATA Data;
DWORD dw;
DWORD dwRead=0;
while (dwRead<sizeof(DATA)-1024)
{
if(dwRead<sizeof(DATA)-1024)
dw=1024;
else
dw=sizeof(DATA)-dwRead;
sockClient.Receive(&Data+dwRead,dw);
dwRead+=dw;
}
可是这样每次只能接收前面一段数据,后面的都接收不到,很可能结构体不能够这样读地址吧?请高手指教是什么原因,万分感谢!
...全文
118 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gnixemos 2005-09-27
  • 打赏
  • 举报
回复
(char *)((char *)&Data+dwRead)
nuaawenlin 2005-09-27
  • 打赏
  • 举报
回复
if(dwRead<sizeof(DATA)-1024)
dw=1024;
else
dw=sizeof(DATA)-dwRead;
sockClient.Receive(&Data+dwRead,dw);
dwRead+=dw;

/////////////////////////////////////////////////////////////

dw=sizeof(DATA)-dwRead;
dwRead=sockClient.Receive(&Data+dwRead,dw);
football 2005-09-26
  • 打赏
  • 举报
回复
另外,分块传输数据,为了提高性能,可以在发包之前,发送此包的长度。

zxyjyzxyjy(星星)的方法也可以,但是对大规模操作不合适。
football 2005-09-26
  • 打赏
  • 举报
回复
sizeof(INFO) = ?
sizeof(DATA) = ?

最基本的问题,你的程序中如果sizeof(DATA) = 1024, 什么都读不到。

程序基本都有问题。
zxyjyzxyjy 2005-09-26
  • 打赏
  • 举报
回复
对于这种分几步传输,在接收数据端,每次接收到数据后都发一确认信号给发送端,发送端在收到确认信号后再传下一数据。在传送开始与结束均可加入一信息表示传输的开始与结束,这样做更可靠。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧