为何传送文件成功后文件打不开?

anlywei 2005-03-06 09:28:53
一个很简单的小程序:
void CP2pDlg::OnServer()
{
// TODO: Add your control notification handler code here
const UINT PORT = 5500;
CSocket sockSrvr;
sockSrvr.Create(PORT);
sockSrvr.Listen();
CSocket sockRecv;
sockSrvr.Accept(sockRecv);

CFile myFile;
myFile.Open("F:\\mp3\\M263.mp3",CFile::modeRead);
int length = myFile.GetLength();
sockRecv.Send(&length,4);
byte *data = new byte[length];
myFile.Read(data,length);
sockRecv.Send(data,length);

AfxMessageBox("发送完毕");
myFile.Close();
delete data;
sockRecv.Close();
}

void CP2pDlg::OnClient()
{
// TODO: Add your control notification handler code here
const UINT PORT = 5500;
CSocket sockClient;
sockClient.Create();
sockClient.Connect("222.201.65.102",PORT);
int length;

sockClient.Receive(&length,4);
byte *data = new byte[length];
sockClient.Receive(data,length);
CFile destFile("D:\\M263.mp3",CFile::modeCreate|CFile::modeWrite);
destFile.Write(data,length);

AfxMessageBox("接收完毕");
destFile.Close();
delete data;
sockClient.Close();
}
客户端收到的绝大多数类型的文件都打不开,只有文本文件可以打开,请问为什么,谢谢!
...全文
471 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
anlywei 2005-03-06
  • 打赏
  • 举报
回复
譬如是MP3的话,传送完打开后听不到声音,如果是一个EXE程序的话,打不开,弹出对话框:
“仅完成部分的ReadProcessMemoty或WrtieProcessMemory请求”。
norsd 2005-03-06
  • 打赏
  • 举报
回复
打不开的概念是什么?

打开时是否说: 文件损坏,或者不支持的文件的类型?

如果是这样的话就可能是,你数据传输中有错误,可能是程序本身传输错误,你加入了纠错机制了吗?

p.s: 文本文件可以打开的原因是:格式简单,怎么样都可以打开
norsd 2005-03-06
  • 打赏
  • 举报
回复
自己建立一个结构,一般包含如下:
struct packet
{
DWORD dwSeq;//发送的序列号。 这个用来纠正数据包的顺序错误。
DWORD dwCRC;//数据包交验; <---这个只是一个保险而已,一般网络协议本身就有这种机制,不过
// 为了可以移植到任何网络,包括一些不成熟的网络协议,你应该
// 包含这个项。
DWORD dwDataSize;//数据大小
BYTE byteData[SIZE];//数据
}
anlywei 2005-03-06
  • 打赏
  • 举报
回复
那请问应该怎样加纠错机制呢?谢谢!
oyljerry 2005-03-06
  • 打赏
  • 举报
回复
可能文件有损坏或不完整

18,356

社区成员

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

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