用socket非阻塞发送文件出错
时间:2011-12-17
来源:互联网
用WSAAsyncSelect(m_socket,m_hWnd,SERVER_MESSAGE,FD_WRITE|FD_ACCEPT|FD_READ|FD_CLOSE)非阻塞发送文件出错
客户端发送代码C/C++ code
服务端接收代码C/C++ code
客户端发送代码C/C++ code
int filesize; CFile file(filename, CFile::modeRead); filesize = (int)file.GetLength(); char buff[1024]; while(filesize > 0) { int read_len = file.Read(buff, sizeof(buff)); int send_len = send(wparam, buff, read_len, 0); filesize = filesize - send_len; } file.Close();
服务端接收代码C/C++ code
CFile file; file.Open(filename, CFile::modeCreate|CFile::modeWrite); char buff[1024]; while(filesize > 0) { int recv_len = recv(m_socket_client, buff, sizeof(buff), 0); file.Write(buff, recv_len); filesize = filesize - recv_len; } file.Close();
作者: lin_c 发布时间: 2011-12-17
能把具体错误说下吗
作者: shn521 发布时间: 2011-12-17
楼主说的太模糊了,得把错误码记录一下,send和recv的时候
还有,既然用异步模式,就要在FD_READ消息来得时候再读取数据
楼主贴得代码也比较少,不知道用的UDP还是TCP?
还有,既然用异步模式,就要在FD_READ消息来得时候再读取数据
楼主贴得代码也比较少,不知道用的UDP还是TCP?
作者: hnwyllmm 发布时间: 2011-12-17
是用TCP传输的 能不能在接收文件的时候把异步模式改为同步模式 这样就可以连续的接收数据了
作者: lin_c 发布时间: 2011-12-17
while(filesize > 0)
{
int read_len = file.Read(buff, sizeof(buff));
int send_len = send(wparam, buff, read_len, 0);
filesize = filesize - send_len;
}
显然就是这里有错误了,如果send_len<read_len,那么你的文件数据就丢失了,那下次循环时,你应该先调用Seek方法进行文件操作位置的调整
{
int read_len = file.Read(buff, sizeof(buff));
int send_len = send(wparam, buff, read_len, 0);
filesize = filesize - send_len;
}
显然就是这里有错误了,如果send_len<read_len,那么你的文件数据就丢失了,那下次循环时,你应该先调用Seek方法进行文件操作位置的调整
作者: fishion 发布时间: 2011-12-17
还有就是你得保证两边的filesize 值是一样的
作者: fishion 发布时间: 2011-12-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28