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的第二个参数就写不出来。 展开
客户端才用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的第二个参数就写不出来。 展开
展开全部
你先用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
char *pBuffer = new char[1024];
DWORD dwReadSize = 0;
::ReadFile(hFile,pBuffer,1024,&dwReadSize,NULL);
send(socket,reinterpret_cast<char *>(pBuffer),dwReadSize,NULL);
当然,文件大小需要你用GetFileSize来获得
最后记得closehandle
追问
复制的。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询