首先,我建立一个命令控制连接, 接着在线程里发送PASV, TYPE, REST,第一个线程可以下载文件了,
接着第二个线程起动发送PASV 想建立第二个数据连接, 当发送完pasv命令以后,第一个线程的数据连接断掉
了, 这是为什么??
难道不是这样连接的嘛???不然,要怎么连接, ftp服务器上好像设置了这个用户的IP可以连接多个socket
ftp服务器是filezilla软件
接着第二个线程起动发送PASV 想建立第二个数据连接, 当发送完pasv命令以后,第一个线程的数据连接断掉
了, 这是为什么??
难道不是这样连接的嘛???不然,要怎么连接, ftp服务器上好像设置了这个用户的IP可以连接多个socket
ftp服务器是filezilla软件
解决方案 »
- 北京电信无线上网卡转让
- 刚学MFC,求教个问题,谢谢各位先,
- 显示JPG图像,如何从指向图像内存首地址的指针得到句柄?
- 接受教育、散尽家财!!
- 在Win2000下用VC6开发,跟WIN2000使用的是FAT32orNTFS文件格式有没有关系?
- 简单问题(见笑)
- 用Hook实现换肤的CustomEyes源代码网址,不知道的可以看看
- ????我用win2000Server的证书颁发给自己的控件签名,颁发之后只有一个.cer的文件,但是缺少.pvk私钥文件
- 在线请求高手——计算机工作1小时左右,长鸣……???解决者立即给分!!!
- afx是什么意思
- 标签颜色问题
- [分享]关于跨线程调用对象指针的一些知识
SOCKET nSocket;
nSocket = CreateHostSocket("10.102.12.213", 21);
//send tfp command
CString strReturnCode="", strReturnContent="";
strReturnContent = SendCommand(nSocket, "USER", "zhengzh");
strReturnCode = GetReturnCode(strReturnContent);
if("220" != strReturnCode)
{
//登陆FTP的用户名,执行成功返回220
return;
}
strReturnContent = SendCommand(nSocket, "PASS", "123456");
strReturnCode = GetReturnCode(strReturnContent);
if("230" != strReturnCode)
{
//密码,执行成功返回230
return;
} //登录成功
//获得文件大小
strReturnContent = SendCommand(nSocket, "SIZE", "20071207.jrn");
strReturnCode = GetReturnCode(strReturnContent);
if("213" != strReturnCode)
{
//文件大小,执行成功返回213
return;
}
//取文件大小
long lFileSize = atoi(strReturnContent.Right(strReturnContent.GetLength() - 4));//起两线程//线程函数
UINT Download(LPVOID lParam)
{
FileInfo *pFile = (FileInfo *)lParam; SOCKET nSocket = pFile->socketCommand;
CString downloadFileName = pFile->downloadFileName;
CString saveFileName = pFile->saveFileName;
CString failFileName = pFile->failFileLog;
CString ip = pFile->ip;
DWORD from = pFile->from;
DWORD to = pFile->to;
CString strReturnCode="", strReturnContent="";
//当第一个线程正在下载的时候, 第二线程到这里发了这个命令以后,第一线程就断掉了
//send PASV
strReturnContent = SendCommand(nSocket,"PASV", "");
strReturnCode = GetReturnCode(strReturnContent);
if("227" != strReturnCode)
{
//文件大小,执行成功返回213
return 0;
} //解析IP地址和端口
IPAddress ipData;
ipData = GetIpAndPort(strReturnContent);
SOCKET nFileSocket;
nFileSocket = CreateHostSocket(ipData.strIP, ipData.uPort); //send TYPE
strReturnContent = SendCommand(nSocket,"TYPE", "A");
strReturnCode = GetReturnCode(strReturnContent);
if("200" != strReturnCode)
{
//指定下载文件的类型, 执行成功返回200
return 0;
} //send REST
strReturnContent = SendCommand(nSocket,"REST", from);
strReturnCode = GetReturnCode(strReturnContent);
if("350" != strReturnCode)
{
//指定文件下载的开始位置,执行成功返回350
return 0;
}
//send RETR
strReturnContent = SendCommand(nSocket,"RETR", downloadFileName);
strReturnCode = GetReturnCode(strReturnContent);
if("150" != strReturnCode)
{
//下载文件,执行成功返回150
return 0;
}
//...............
}
不断才怪
==========================
是的,就是这个原因,虽然你的服务器接受多个socket,但是客户端在同一个socket上你要建立两个连接那是不行的.
我写过FTP SERVER
本来我可以告诉你,
但是看了你另外一个帖子
你自己去读RFC959协议吧
谢谢