vc++ socket问题

从服务器端发送jpg图片到客户端,大概1S发一次。下面是服务器发送线程和客户端接收线程客户端才用event通知接收,当OnReceive响应的时候setEvent,开始接... 从服务器端发送jpg图片到客户端,大概1S发一次。下面是服务器发送线程和客户端接收线程
客户端才用event通知接收,当OnReceive响应的时候setEvent,开始接收。
服务器端:m_ImageServer.Send(&fileLength,4); //文件大小
data=new char[fileLength];
file.Read(data,fileLength);
m_ImageServer.Send(data,fileLength);//文件数据
客户端:
m_ImageClient.Receive(&fileLength,4);
data=new char[fileLength];
m_ImageClient.Receive(data,fileLength);
其中receive和send如果我中间用了sleep(100),可以接收,但是客户端有时候好几秒都收不到图片。
如果没有sleep,那么得到的fileLength有时候是错误的值,可能是负数。。
请问,怎么解决这个问题,是不是要把fileLength和Data放到结构体中一起发送,但是这样接收的时候我就不知道Data有多大了。Receive的第二个参数就写不出来。
展开
 我来答
Acklzmtym丶
推荐于2016-07-22 · TA获得超过137个赞
知道答主
回答量:180
采纳率:100%
帮助的人:52.1万
展开全部
你先用readfile把文件一次性读到缓冲区中。这样下面的操作就和传送字符一样了。在将文件的长度通知客户端,让他分配好内存,准备接受文件。下面就将缓冲区的东西发送到客户端就行了。这个方法进行小文件传输还凑合,要传输大文件需要先把文件分块传送。

char *pBuffer = new char[1024];
DWORD dwReadSize = 0;
::ReadFile(hFile,pBuffer,1024,&dwReadSize,NULL);
send(socket,reinterpret_cast<char *>(pBuffer),dwReadSize,NULL);

当然,文件大小需要你用GetFileSize来获得
最后记得closehandle
追问
复制的。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式