关于wince的ftp,很怪的问题.
目标板系统,具有3G,网线RJ45接口.3G是使用的中兴的MC2716.软件系统是wince6.0,我在路由器里添加了"转发规则"把PC的端口映射到公网上.wince下面是用的wininet.lib这个东西做FTP客户端.以下是代码,但是,发现有非常怪的现象.用3G的时候,3G能拨号成功.也看到能获得到IP地址,使用IE打开网页也能成功,虽然很慢的那种.但FTP经常不成功.不成功是指,一直不成功.不会在里面偶尔成功一次.
很难得会出现3G连接成功,FTP也成功.奇怪的是,一般是在早上到上午这段时间是成功的.这是一怪.
下面说说二怪.
在3g拨号成功FTP也成功的情况下.
test.txt这个文件,我改成1024个字符'p'.在wince里运行下面的程序,能有/messagelib20110727042337.txt这个文件,并且里面也是1024个'p'.不退出程序,我再次在PC上修改test.txt这个文件,改成1024个'O';运行wince的程序.然后打开/messagelib20110727042337.txt这个文件,发现竟然还是1024个'p'.我再多试几次,都是.并没有变成1024个O.然后我关闭wince里的程序,并再次打开运行,然后打开/messagelib20110727042337.txt这个文件,发现竟然变成了1024个O.我又多试了几次,发现只有关闭wince的程序再运才能获得最新的test.txt文件.
我又做一次试验,不用3g用网线接到目标板上,同样是以公网的方式仿问PC机.发现不用退出程序就能获得test.txt修改后的内容.
奇,同样的代码,为什么在3g下面会有这样的结果.望大家赐教。
#define _MY_DEBUG_FTP
unsigned long FTPTIMES=0;
void CftpwininetDlg::OnBnClickedButton1()
{
HINTERNET hInstance;
HINTERNET hConnect;
CString FTPName=_T("FTPTEST");
CString str;
FTPTIMES++;
str.Format(_T("%d"),FTPTIMES);
FTPName=FTPName+str;
hInstance = InternetOpen( FTPName,
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
0);
char i=0;
if(hInstance == NULL) {
#ifdef _MY_DEBUG_FTP
MessageBox(_T("FTP初始化失败"));
#endif
return ;
}
CString strIP;
int IPRport;
CString strTemp;
for(i=0;i<4;i++){
IPV[i].GetWindowText(strTemp);
strIP+=strTemp;
if (i<3){strIP+='.';}
}
Rport.GetWindowText(strTemp);
IPRport=_wtoi(strTemp);
CString FTPNAME=_T("guest");
CString FTPPWD=_T("guest");
CString SFileDirName=_T("/test.txt");
CString RFileDirName=_T("/messagelib20110727042337.txt");
hConnect = InternetConnect(hInstance,
strIP, //服务器地址
IPRport, //端口号
FTPNAME, //账号
FTPPWD, //密码
INTERNET_SERVICE_FTP,
INTERNET_FLAG_PASSIVE,
0);
if (hConnect == NULL)
{
GetLastError();
InternetCloseHandle(hInstance);
hInstance = NULL;
#ifdef _MY_DEBUG_FTP
MessageBox(_T("FTP连接失败"));
#endif
return ;
}
BOOL BLV;
//服务器要有hello.txt这个文件,2st表示要取的文件,3st表示在本地新建的名字,4st,参数为False,文件存在的话覆盖,5st是给CreateFile用
//BLV=FtpGetFile(hConnect,SFileDirName,RFileDirName,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_ASCII ,NULL);
BLV=FtpGetFile(hConnect,SFileDirName,RFileDirName,FALSE,FILE_ATTRIBUTE_ARCHIVE,FTP_TRANSFER_TYPE_UNKNOWN ,NULL);
if(BLV==FALSE){
#ifdef _MY_DEBUG_FTP
MessageBox(_T("FTP下载文件失败"));
#endif
DWORD er=GetLastError();
CString strer;
strer.Format(_T("error:%d"),er);
MessageBox(strer);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInstance);
return ;
}
MessageBox(_T("Download OK"));
InternetCloseHandle(hConnect);
InternetCloseHandle(hInstance);
return ;
} --------------------编程问答-------------------- 这么好的问题怎么没有人回答啊,顶一下!支持 --------------------编程问答-------------------- 顶上去,有类似的需要
补充:.NET技术 , VC.NET