即能传文件,又能传消息怎样考虑接收端,看我的代码,我的是这样处理的,但是有问题

MFCClass 2004-05-08 02:10:25
same
...全文
33 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
luxingjyp 2004-05-14
你为什么要这样呢,其实可以在传送文件前,
1.通知对方有文件到,同时把本机的IP和用来发送文件的新端口传过去,并用阻塞模式启动文件的发送线程.
2.当对方收到消息后,用收到的文件发送方的信息启动一个阻塞模式模式的接收线程

这样的话,就可以在发送和接收文件时同样也可以通信息了,我的程序中就是这样的,工作的很好.
  • 打赏
  • 举报
回复
zhufeng98 2004-05-08
string.Delete(0,1);
strcpy(buf,string);
file.Write(buf,n);

1.你收到了n个字节数据,你自己去掉了前面的'F',居然还往文件里写n个字节,不是每条都增加了一个字节?
2.字符串的存放,最后会以'\0'结尾,是否把'\0'也写进文件去了,这样每条又增加一个字节.

因此,如果你个二进制文件传输过来,被你插入了无数字节,文件格式还对才怪!
你检查一下,传输过来的数据组成的文件是否比原来文件大了很多?
如果是大了,就是以上原因
  • 打赏
  • 举报
回复
MFCClass 2004-05-08
bufx[1024]={0};
  • 打赏
  • 举报
回复
自由的风 2004-05-08
bufx
这个接收数组,在recv前,先用ZeroMemory()清空
  • 打赏
  • 举报
回复
MFCClass 2004-05-08
我自己孤单的up一下
  • 打赏
  • 举报
回复
MFCClass 2004-05-08
数据和文件的接收,都是FD_READ消息触发后循环的触发(因为发送是循环的发送).调用上面的函数
  • 打赏
  • 举报
回复
MFCClass 2004-05-08
bool CSocket_sdk_sDlg::RevData()
{
char bufx[1024]={0};
char buf[1024]={0};
CString string;
int n=0;
int ret=0;
CString szTextNow;
n=recv(sclientRev,bufx,1024,0); //接受
if(n==SOCKET_ERROR)
{
AfxMessageBox("error");
return false;
}
string.Format("%s",bufx);
if (string.Mid(0,1)=="M")
{
string.Delete(0,1);
GetDlgItem(IDC_EDIT2)->GetWindowText(szTextNow);
szTextNow+=string;
GetDlgItem(IDC_EDIT2)->SetWindowText(szTextNow);
}
else if (string.Mid(0,1)=="F")
{
if (nRecIndex==0)
{
GetDlgItem(IDC_BUTTON3)->EnableWindow(false);
string.Delete(0,1);
m_szFilename=string;
}
else if (nRecIndex==1)
{
string.Delete(0,1);
m_szFileSize=string;
m_proess.SetRange32(0,atol(m_szFileSize));
}
else
{
string.Delete(0,1);
strcpy(buf,string);
file.Write(buf,n);
}
nNum+=n;
m_proess.SetPos(nNum);
nRecIndex++;
if (m_proess.GetPos()==atol(m_szFileSize))
{
GetDlgItem(IDC_BUTTON3)->EnableWindow(true);
GetDlgItem(IDC_revflag)->SetWindowText("文件传输成功!");
}
}
return true;
}
  • 打赏
  • 举报
回复
自由的风 2004-05-08
最好把文件分割和组合的核心部分的代码贴一下
  • 打赏
  • 举报
回复
MFCClass 2004-05-08
我说的消息是相对于文件说的,就是简单的字符串
  • 打赏
  • 举报
回复
自由的风 2004-05-08
首先不明白为什么要发消息,消息不是FD_XXX吗?
文件问题,我估计是文件分割时的问题
  • 打赏
  • 举报
回复
MFCClass 2004-05-08
补充一下,我的意思是在传文件的同时,也能传消息
tcp 方式,WSAansyselect i/o 模型,C/S都是这样
M-我将循环发送消息的数据前加上了‘M’每条都加
F-我将循环发送文件前加上了‘F’每条都加
接受时我判断数据是否有‘M’和‘F’,做响应的判断,然后处理
但是,发文件时有问题,
先删除数据前的‘F’字符,然后处理 问题是文件不正常,文件格式修改了,有问题
  • 打赏
  • 举报
回复
相关推荐
发帖
网络编程
加入

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2004-05-08 02:10
社区公告
暂无公告