解决方案 »
- **关于控件的问题?
- 如何在MDI程序中,多个视图窗口分别绘不同的曲线?
- 怎么样计算tcp的校检值?有没有相应的api?
- error C2039: 'UnLock' : is not a member of 'CSingleLock'
- 没有分了谁能帮我?怎样将视类里的onmousemove消息中的cpoint,改为逻辑坐标,写详细代码。谢谢。
- Accept 后怎样获得对方的IP呢?急!!!
- 如何将CTime t = CTime::GetCurrentTime();得到的系统时间变为字符串型
- 朋友们介绍介绍网站吧!
- 如何在windows 的console控制台程序里,捕获ctrl+x这样的组合键?
- 我的程序总是运行到这个函数出错, 怎么回事?
- 【新手】【一个很令人不解的问题】
- 求一个MFC的媒体播放器 要求可以换皮肤 可以播放局域网的视频文件 要有源代码
Sbuf +=dlg->FindData.cFileName;
int namelen=strlen(dlg->FindData.cFileName);
int len=sizeof(SOCKADDR); while(!(file.Open(strWildcard,CFile::modeRead|CFile::typeBinary)))
{
}
if((send(socket,Sbuf.GetBuffer(0),namelen+3,0))==SOCKET_ERROR) //先发路径
{
AfxMessageBox("start error");
Sbuf.ReleaseBuffer();
return 1;
}
Sbuf.ReleaseBuffer();
http://download.csdn.net/source/719443
我写的文件传输c/s.
socket select io模型传文件
使用socket select io模型传文件,3K一包.保证数据绝对唯一学习下吧
你的客户机的代码在recv过后的处理有问题,不能直接判断
if(recvbuf[0]=='0'&&recvbuf[1]=='1')这些东西
因为TCP是基于字节流的协议,每次recv并不是整边界的,也就是说并不是每次recv返回的都正好是你send的整个缓冲内容
我的建议是一次大于1024字节有利于提高网络吞吐量
返回的这个finish,如果是接收文件名包的话,这个finish大于你发的文件名长度,就有肯能吧数据包一起接收过来了。如果是接收文件数据包的话, 这个finish小于1202,那肯定是这个包分了多次接收,需要保存数据,并在下次接收包的时候组合一下。所以判断到头2个数据格式不对时,也可能是被截断的数据包。 if(recvbuf[0]=='0'&&recvbuf[1]=='1')
{
filename+="\\";
filename+=&recvbuf[2];
file.Open((LPCTSTR)filename,CFile::modeCreate|CFile::modeWrite);
}
else if(recvbuf[0]=='1'&&recvbuf[1]=='1')
{
file.Write(&recvbuf[2],finish-2);
}
else if(recvbuf[0]=='N'&&recvbuf[1]=='N'&&recvbuf[2]=='N'&&recvbuf[3]=='N'&&recvbuf[4]=='N')
{
AfxMessageBox("文件接收完成");
file.Close();
}
else
TRACE("收到截断的数据包!\r\n");看看有没有输出就知道了。个人意见,