Ⅰ C语言用Socket连接FTP服务端发送帐号的问题
敢不敢排个版
Ⅱ 状态:> 正在连接 ftp 数据 socket 121.131.123.76:50007...
经常登录各种FTP服务器,会遇到socket错误,朋友也经常遇到,来问我。偏偏大家使用的是不同的FTP软件,所以,今天我把几种目前常用FTP软件的解决办法告诉大家。
★Cute FTP 3.5英文版:FTP—>Settings—>Options—>Firewall,将“PASV mode”前复选框中的打勾去掉。
★Cute FTP3.5中文版:FTP—>设置—>选项—>防火墙,“PASV方式(A)”前复选框中的打勾去掉。
★Cute FTP4.0中文版:右击你所建立的ftp站点—>选择属性(properties)—>去掉"use PASV mod" 选择项
★Cute FTP Pro2.0中文版:编辑—>全局设置—>连接—>连接类型,“PASV/PORT”下拉选项菜单选择PORT。
★Leap FTP2.7.2:Sites—>Site Manager—>Advanced,将“Use PASV mode”前复选框中的打勾去掉。
★flashfxp : 选项->参数->代理->去掉“使用被动模式”
★flashget : 选项->参数->代理服务器->编辑->将“Use PASV mode”前复选框中的打勾去掉。
Ⅲ ftp无法访问远端服务器,显示socket已连接,正在等待欢迎页面,然后长时间无响应,显示连接超时,重新登录
那就是你FTP配置出问题了。你多下载几个FTP软件,来用用。
Ⅳ 用socket写FTP客户端问题
是的。
需要有两个套接字,一个用于命令(cmdSocket),一个用于数据(dataSocket)
cmdSocket与ftp服务器21端口(如果ftp服务器没做特殊设置的话)连接,dataSocket因PASV和PORT模式不同,而有所差别。
PASV模式:
1)通过命令cmdSocket套接字发送PASV
2)server端会返回ip地址和专门的数据传输端口号
3)在命令套接字cmdSocket上发送LIST命令
4)本地建立dataSocket连接server提供的数据传输端口号(此步中,本地作为客户端)
5)server端通过cmdSocket返回150 开头的响应(需要读取cmdSocket)
6)本地通过dataSocket接收数据,即通过dataSocket的inputStream读取dataSocket中的数据
7)传输完毕(read返回-1),cmdSocket会返回226 开头的响应,关闭连接即可
PORT模式:
1)在本地启动某个端口的监听(本地作为服务端,使用ServerSocket)
2)通过命令cmdSocket套接字发送PORT,PORT命令后加参数:本地ip+刚启动监听的端口
3)server端响应200
4)在cmdSocket上发送LIST命令
5)调用ServerSocket.accept()获得数据套接字dataSocket(ftp server作为客户连接本地的端口)
6)server端通过cmdSocket返回150 开头的响应(需要读取cmdSocket)
7)本地通过dataSocket接收数据,即通过dataSocket的inputStream读取dataSocket中的数据
8)传输完毕(read返回-1),cmdSocket会返回226 开头的响应,关闭连接即可
Ⅳ socket编程:FTP协议客户端 CAsynSocket类的问题
我之前写过一个示例的FTP服务器。FTP协议和HTTP协议一样,都是属于一问一答的,当你的命令连接与FTP服务器连接后,就要等待响应服务器的欢迎信息 220, 然后再发送请求进行登陆,发送完后不要再发送其他命令了,一定要等刚刚的请求响应完成。所以你不要一次性把4个命令全部发送过去。一定要保证一问一答。
Ⅵ 连接ftp服务器时,提示Socket Error #10060 Connection timed out 怎样解决,是什么情况才会出现。
是不是你本机的防火墙或者反病毒导致连接超时?
Ⅶ 想用socket+mfc写一个ftp服务器,但是文件操作出了问题,不知道怎么写,网上没有这方面的教
//MFC里有CFtpConnection,你可以直接使用,不需要自己去写
CInternetSessionsess(_T("MyFTPSession"));
CFtpConnection*pConnect=NULL;
try
{
//Requestaconnectiontoftp.microsoft.com.Default
//parametersmeanthatwe'lltrywithusername=ANONYMOUS
//@domainname
pConnect=sess.GetFtpConnection(_T("ftp.microsoft.com"));
//
CFtpFileFindfinder(pConnect);
//startlooping
BOOLbWorking=finder.FindFile(_T("*"));
while(bWorking)
{
bWorking=finder.FindNextFile();
_tprintf_s(_T("%s "),(LPCTSTR)finder.GetFileURL());
}
}
catch(CInternetException*pEx)
{
TCHARsz[1024];
pEx->GetErrorMessage(sz,1024);
_tprintf_s(_T("ERROR!%s "),sz);
pEx->Delete();
}
//iftheconnectionisopen,closeit
if(pConnect!=NULL)
{
pConnect->Close();
deletepConnect;
}
Ⅷ ftp无法连接
注意这段话:
227 Entering Passive Mode (60,165,133,154,13,31)
ERROR: [Data]: Connection refused
PASV模式,PORT模式错误~!
如果你用的是ftp客户端软件请把被动模式选择上就可以了。
补充:返回值:227 Entering Passive Mode (60,165,133,154,13,31)说明
每一个ftp发送之后,ftp服务器都会返回一个字符串,其中包括一个返回代码和一串说明信息。这个返回码主要是用于判断命令是否被成功执行了。除此之外,还有一个非常重要的命令的返回。当发送pasv之后,返回“227 entering passive mode (60,165,133,154,13,31)”。这意味着在服务器上有一个端口被开放,他将为我们后面接着的数据传输作好准备,但是我们如何知道该端口号呢,就在(60,165,133,154,13,31)中,前面四位指服务器的地址,关键是最后两位,将最后第二位乘256再加上最后一位的值就是我们的端口号,也就是13*256+31。取得端口号之后我们就可以用socket连接到这里。这为我们后面的工作作好准备了,因为我们的取得列表,上传,下载文件都要依靠它来实现。常用的返回如下:
125 data connection already open; transfer starting.
226 transfer complete.
227 entering passive mode (60,165,133,154,13,31).
230 user xxxxx logged in.
331 password required for xxxxx.
425 can’t open data connection.
226 closing data connection.
ftp客户端编程结构:
前面已提到了ftp命令及其响应信息。其实我们做ftp客户端工具只不过是用一个winsocket连接上ftp服务器,然后象其发送命令。在这个过程中,我们依靠发送——响应的机制。即发送ftp命令——接收返回的响应信息——分析该信息——执行相关操作——发送下一条命令。在一般意义上,有一个socket用来连接ftp服务器的相关端口(如默认的21),它负责ftp命令的发送和接收返回的响应信息。一些操作如“进入目录”,“删除文件”,依靠这个socket发送一条命令就可完成了。然而对于有数据传输的操作,主要是显示远端目录列表,上传、下载文件,我们不得不依靠另一个socket来完成。在进行这种操作之前,必须发送pasv命令,它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,关键是最后两个,将倒数第二个乘256再加上最后一个数字,其结果就是ftp服务器开放的用于下一条命令来进行数据传输的端口。如我们得到227 entering passive mode (60,165,133,154,13,31),那么端口号是13*256+31=3359。我们用一个socket来连接这个端口,之后,我们可根据具体的操作(显示目录list,上传文件stor,下载retr)来发送命令。返回的响应代码为125开头,也就是连接打开了,可以开始传输数据,这时就可用socket的发送或接收方法来传输数据。完成之后,服务器会返回代码226 transfer complete,表明数据传输完成。值得注意的是,我们最好不要一次发送多条命令,例如我们要回到上层目录并且显示这个目录,我们得发送cp,pasv,list,我们不能一下子发送:cp\r\n, pasv\r\n, list\r\n。 而是发送完cp之后等待其响应代码,然后再发送后面一条。当pasv返回之后,我们打开另一个socket连接到相关端口上。然后发送list,返回125之后在开始接收数据,最后返回226表明完成。对于上传和下载也是差不多的过程(下载之前要先取得文件的大小)。
Ⅸ 我在用C++的SOCKET写一个简单的FTP服务器,需要把本地目录发给客户端,请问当用户发送"LIST"命令时,怎么
看你的服务器是基于什么系统了。如果是unix/linux系统,你可以用系统调用来读取当前目录下的文件列表(包括目录,目录也是文件),通常这个步骤只需要一个循环。通过这个步骤其实你就可以到了当前目录下的文件名,然后你只需把这些文件名发送给客户端就可以了。当然,这是最简单的方式。你也是可以根据自己的喜好,把文件的访问权限,拥有者等信息,按照一定的格式发给客户端。
对于windows系统,处理方式与此类似,只不过把读取当前目录下的文件列表的系统调用换成windows相应的调用即可。
Ⅹ 怎样在winCE里用socket通信给FTP上传文件
现ftp主要三种用途:
、用作网站空间存放网站程序
二、用作论坛或其类型网站远程附件盘
三、公司(集体)或需要
文件传输协议(FTP)RFC 959定义于198510月发布文件传输协议(FTP)设计跨平台、简单且易于实现协议文件传输协议(FTP)漫演化史互联网重要应用至今却已江河本文作者各面列举些文件传输协议(FTP)诟病缺点
FTP文件传输协议必消亡五理由
1.数据传输模式合理
考虑文件自身内容味使用ASCII模式传输数据合理文件传输协议(FTP)应该具自检测功能用户进行自定义
虽现许LinuxWindows客户端已经支持自传输模式达数代UNIXWindows客户端都默认使用ASCII传输模式种传输模式甚至造文件损坏
2.工作式设计合理
文件传输协议(FTP)主模式(PORT)或模式(PASV)工作决定数据链接建立式
主模式客户端首先向服务器端发送IP址端口号等待服务器端建立TCP链接模式客户端同首先建立服务器链接服务器端启端口(10245000间)等待客户端传输数据
文件传输协议(FTP)让思议客户端侦听服务器端
3.与防火墙工作协调
文件传输协议(FTP)诞网络址转换(NAT)防火墙前网络存恶意攻击今数终用户IPv4址已路由防火墙使用IPv4址短缺
FTP意味着呢意味着FTP客户端IP址路由或者位于防火墙能使用传输模式进行数据传输
服务器端IP址路由或者位于防火墙呢FTP进行数据传输
现许防火墙适用于NAT环境使用些特殊技巧(hacks)允许FTP防火墙工作需要防火墙进行配置
4.密码安全策略完善
互联网早期文件传输协议(FTP)并没密码安全作规定FTP客户端服务器端数据明文形式传输任何通讯路径路由具控制能力都通嗅探获取密码数据
我使用SSL封装FTPFTP通建立链接进行数据传输我即便保护密码安全难保护数据传输安全性
自文件传输协议(FTP)发布安全数据传输经历足发展推荐使用SCP取代FTP进行文件传输
5.FTP协议效率低
FTP服务器检索文件包含繁复交换握手步骤:
客户端建立FTP服务器端控制端口TCP Socket链接并等待TCP握手完
客户端等待服务器端发送执
客户端向服务器端发送用户名并等待响应
客户端向服务器端发送密码并等待响应
客户端向服务器端发送SYST命令并等待响应
客户端向服务器端发送TYPE I命令并等待响应
用户需要服务器端切换目录客户端仍发送命令并等待响应
主模式客户端需要发送PORT命令服务器端等待响应(模式与主模式相反)
建立数据传输链接(需要经三握手建立条TCP Socket连接)
通链接传输数据
客户端等待服务器端控制连接发送2xx指令确保数据传输功
客户端发送QUIT命令并等待服务器响应
同情形我看看HTTP协议:
HTTP客户端向HTTP服务器端建立条TCP Socket连接
HTTP客户端向HTTP服务器端发送GET命令包含URL、HTTP协议版本、虚拟主机名等等并等待响应
HTTP服务器端响应包含所想要数据完
传输文件FTP需要往复10HTTP需要2传输文件FTP省略发送用户名密码步骤HTTP则使用固定套接字(Socket)相同TCP连接传输文件
综所述虽文件传输协议(FTP)曾经显赫现已经既安全友且效率低协议势必取代