用WSAAsyncSelect(m_socket,m_hWnd,SERVER_MESSAGE,FD_WRITE|FD_ACCEPT|FD_READ|FD_CLOSE)非阻塞发送文件出错客户端发送代码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();
服务端接收代码 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();
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();
服务端接收代码 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();
还有,既然用异步模式,就要在FD_READ消息来得时候再读取数据
楼主贴得代码也比较少,不知道用的UDP还是TCP?
{
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方法进行文件操作位置的调整