网络通信SOCKET编程中如何实现各种文档的传输(MFC),txt的可以但其他如word就不行了

shakeyou123 2008-09-08 08:08:52
我的读写文件的代码是这样的,TXT的没有问题,但其他的都不对了。
我是通过串行化CArchive来实现传输的
定义的主要变量和初始化为
CArchive* m_aSessionIn;
CArchive* m_aSessionOut;
CSocketFile* m_sfSocketFile;

m_sfSocketFile= new CSocketFile(this);
m_aSessionIn=new CArchive(m_sfSocketFile,CArchive::load);
m_aSessionOut=new CArchive(m_sfSocketFile,CArchive::store);
读文件内容到缓冲区(m_dlg为对话框句柄)
文件对话框的打开和保存都是用CFileDialog实现的,都是设置的ALL files
CFile file(m_dlg->m_NeedTransferFiles[i],CFile::modeRead|CFile::shareDenyWrite);
m_dlg->SetWindowText("正在传输"+m_dlg->m_NeedTransferFiles[i]);
byte *buffer=NULL;
long count=file.GetLength();
buffer= new byte[count+1];
file.Read(buffer,count);
buffer[count]='\0';
m.m_iCommand=2;
m.m_strText=buffer;
m_dlg->m_TransferSocket.SendMessage(&m);
m_dlg->SetWindowText(m_dlg->m_NeedTransferFiles[i]+"传输完毕!");
file.Close();
将缓冲区内容写到文件中的代码主要为。msg为CMessg对象,它是我自己添加的,主要是实现串行化的
m_file.Write(msg.m_strText,msg.m_strText.GetLength());
m_file.Close();
CMessg中的函数主要为
void CMessg::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar << m_iCommand;
ar << m_strText;
}
else
{
ar >> m_iCommand;
ar >> m_strText;
}
}
另外sSendmessage函数主要为
if (m_aSessionOut != NULL)
{
msg->Serialize(*m_aSessionOut);
m_aSessionOut->Flush();
return TRUE;
}
我是这方面的新手,请大家指教了
...全文
99 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingyongqiang117 2008-09-22
  • 打赏
  • 举报
回复
直接以二进制的形式发过去就行,不用这么麻烦!
shakeyou123 2008-09-13
  • 打赏
  • 举报
回复
可以说的更详细点嘛,我才涉及这方面的
mengjj 2008-09-09
  • 打赏
  • 举报
回复
你这样肯定不行了,因为你是用字符串来传递的,应该以字节流来传递.

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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