局域网和internet上文件传输问题。 我在局域网实现了发信息和传送文件。不过传文件不打稳定!我想知道有什么好的办法,还有就是我想知道怎么才能在internet上实现发信息和传送文件??请大虾们说说思路,也希望有代码的大虾能给我发一份谢谢。[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么会传文件不稳定?Intenet和局域网的程序是一样的 对于网络不稳定的情况,最好能把文件分段(固定短长)打包(加入标识,文件的那部分)来传送,接受程序利用响应的机制来接受。如果你的程序要支持网际间传输,必须考虑有代理服务器的情况,如果双方都处于私网内,不借助与服务器是不可能实现的。建议看一下RFC 1928(SOCKES5代理协议)。 这是接收端的:DWORD WINAPI clientthread(LPVOID lpparam){ fileinfo* fiinfo; char* m_buf; m_buf=new char[100]; CString aaa; int ret; int m_nBuf; ret= m_STemp.Receive(m_buf,100); Sleep(500); fiinfo=(fileinfo*)m_buf; switch(fiinfo->iType) { case 0: break; case 2: break; case 1: readfile(fiinfo->iSeek,fiinfo->lLenth,fiinfo->iFileNo); break; default: break; } return 0;}void readfile( int seek, int len, int fino ){ CFile myFile; int iCount = myFile.Open("ajp.exe", CFile::modeCreate|CFile::modeWrite | CFile::typeBinary); myFile.Seek(seek,CFile::begin); char m_buf[1024]; char *m_bufBak; int len2 = myFile.GetLength(); while(1) { int kk = m_STemp.Receive(m_buf,SIZE); Sleep(100); len -= kk; myFile.Write(m_buf,kk); if(kk == 0||len<=0) { break; } } myFile.Close();}可是又必须在每次m_STemp.Receive接收前加Sleep(),相应的在每次发送端也要加上sleep否则会出错 回cmsbai(小白);你说的我不大明白,我是菜鸟。能不能详细说一下1。对于网络不稳定的情况,最好能把文件分段(固定短长)打包(加入标识,文件的那部分)来传送,接受程序利用响应的机制来接受。////////*********用什么样的机制好呢!如果你的程序要支持网际间传输,必须考虑有代理服务器的情况,如果双方都处于私网内,不借助与服务器是不可能实现的。建议看一下RFC 1928(SOCKES5代理协议)。//////////**********这个也没看懂。谢谢 http://www.vchelp.net/cndevforum/subject_view.asp?subject_id=21228&forum_id=25 界面翻页问题 如何让服务端只接受指定IP的数据 VC应用在哪些方面? 帮忙看一下这段代码有什么问题 请教:有关RichEdit控件 ###怎么样给程序加上右键菜单 ?@@@ 江湖告急:关于控件 @@@ 将unicode编码的串转成普通串长度如何算出?(急,在线等) 一个程序用Alt+Tab键切换成不是当前的后,又把它切换成当前的时有什么消息产生? 请教一个关于进程的问题 给分,救命,给分,救命 ,这种问题怎么解决???? 500分求助,马上给分!
Intenet和局域网的程序是一样的
接受程序利用响应的机制来接受。
如果你的程序要支持网际间传输,必须考虑有代理服务器的情况,如果双方都处于私网内,不借助与服务器是不可能实现的。建议看一下RFC 1928(SOCKES5代理协议)。
DWORD WINAPI clientthread(LPVOID lpparam)
{
fileinfo* fiinfo;
char* m_buf;
m_buf=new char[100];
CString aaa;
int ret;
int m_nBuf;
ret= m_STemp.Receive(m_buf,100);
Sleep(500);
fiinfo=(fileinfo*)m_buf;
switch(fiinfo->iType)
{
case 0: break;
case 2:
break;
case 1:
readfile(fiinfo->iSeek,fiinfo->lLenth,fiinfo->iFileNo);
break;
default:
break;
}
return 0;
}
void readfile( int seek,
int len,
int fino
)
{
CFile myFile;
int iCount = myFile.Open("ajp.exe", CFile::modeCreate|CFile::modeWrite | CFile::typeBinary);
myFile.Seek(seek,CFile::begin);
char m_buf[1024];
char *m_bufBak;
int len2 = myFile.GetLength();
while(1)
{
int kk = m_STemp.Receive(m_buf,SIZE);
Sleep(100);
len -= kk;
myFile.Write(m_buf,kk);
if(kk == 0||len<=0)
{
break;
}
}
myFile.Close();
}
可是又必须在每次m_STemp.Receive接收前加Sleep(),相应的在每次发送端也要加上sleep否则会出错
1。对于网络不稳定的情况,最好能把文件分段(固定短长)打包(加入标识,文件的那部分)来传送,接受程序利用响应的机制来接受。
////////*********用什么样的机制好呢!
如果你的程序要支持网际间传输,必须考虑有代理服务器的情况,如果双方都处于私网内,不借助与服务器是不可能实现的。建议看一下RFC 1928(SOCKES5代理协议)。
//////////**********这个也没看懂。
谢谢