以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  获取ftp服务器文件列表不到  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=175352)

--  作者:ouyangfenghuan
--  发布时间:2022/3/1 19:43:00
--  获取ftp服务器文件列表不到
连接成功,打开FTP客户端后信息如下:

[19:33:51] 正在列表
[19:33:51] 进入PASV模式失败,500 Command unrecognized : PASV
[19:33:51] 列表失败,425 Sorry, need PORT command first
[19:33:51] 正在列表
[19:33:51] FTP错误,System.Net.Sockets.SocketException (0x80004005): 远程主机强迫关闭了一个现有的连接。
   at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at Foxtable.FTPClient.o.O.O.0.(String A_0, Boolean A_1)
[19:33:51] 进入PASV模式失败,425 Sorry, need PORT command first
[19:33:51] FTP错误,System.Net.Sockets.SocketException (0x80004005): 远程主机强迫关闭了一个现有的连接。
   at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at Foxtable.FTPClient.o.O.O.0.(String A_0, Boolean A_1)
[19:33:51] 列表失败,425 Sorry, need PORT command first

用fliezilla连接信息如下:
状态: 正在连接 192.168.1.30:21...
状态: 连接建立,等待欢迎消息...
响应: 220 Welcome to XinDai Ftp Server version 1.1 
命令: USER cnc
响应: 331 Password required
命令: PASS ***
响应: 230 cnc logged in
命令: SYST
响应: 500 Command unrecognized : SYST
命令: FEAT
响应: 500 Command unrecognized : FEAT
状态: 已连接
状态: 读取目录列表...
命令: PWD
响应: 257 "d:/Cnc/NcFiles" is current directory
命令: TYPE I
响应: 200 Binary mode
命令: PASV
响应: 500 Command unrecognized : PASV
命令: PORT 192,168,1,142,253,255
响应: 200 Port command successful
命令: LIST
响应: 150 Openning data connection
响应: 250 Done
状态: 列出目录成功
状态: 读取目录列表...
命令: PASV
响应: 500 Command unrecognized : PASV
命令: PORT 192,168,1,142,239,128
响应: 200 Port command successful
命令: LIST
响应: 150 Openning data connection
响应: 250 Done
状态: 列出目录成功

是还要添加什么代码用来发送端口命令吗?




--  作者:有点蓝
--  发布时间:2022/3/1 20:34:00
--  
参考这里的方法设置pasv模式:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&replyID=714466&ID=104284&skin=1
--  作者:ouyangfenghuan
--  发布时间:2022/3/1 22:07:00
--  
提供ftp服务的是数控车床的控制器,不是电脑没法设置。现在是用狐表打不开列表,用fliezilla可以。
狐表提示[19:33:51] 列表失败,425 Sorry, need PORT command first

--  作者:ouyangfenghuan
--  发布时间:2022/3/1 22:09:00
--  
有没有相应代码解决这个错误提示?
--  作者:有点蓝
--  发布时间:2022/3/1 22:35:00
--  
试试使用.net提供的FtpWebRequest自己实现一个ftp客户端:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.ftpwebrequest?view=netframework-4.0
--  作者:ouyangfenghuan
--  发布时间:2022/3/3 20:01:00
--  
老师这个一般是什么情况?在命令窗口执行下列代码

Dim ftp1 As New FtpClient
ftp1.Host="192.168.1.23"
ftp1.Account = "anonymous"
ftp1.Password = "anonymous-guest"
ftp1.UTF8= True
If ftp1.Connected Then
    Output.Show(ftp1.CurrentDir)
Else
    ftp1.Connect
    Output.Show(ftp1.CurrentDir)
End If


If ftp1.Upload("c:\\data\\SP1201.NC","\\SP1201.NC",True) = True Then
    output.show("上传完成!")
Else
    output.show("上传失败!")
End If

If ftp1.Download("\\SP1201.NC","c:\\data\\08452.NC",True) = True Then
    output.show("下载完成!")
Else
    output.show("下载失败!")
End If
Output.Show("end")




输出反馈结果如下:
/
上传完成!
下载失败!
end

过程图片如下:

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看







--  作者:ouyangfenghuan
--  发布时间:2022/3/3 20:16:00
--  
从微软上的FtpWebRequest完全看不懂,也是同样写在代码里面吗?麻烦老师指点下


下面的代码示例演示如何使用类从 FTP 服务器下载文件 WebClient 。

public static bool DisplayFileFromServer(Uri serverUri)
{
    // The serverUri parameter should start with the ftp:// scheme.
    if (serverUri.Scheme != Uri.UriSchemeFtp)
    {
        return false;
    }
    // Get the object used to communicate with the server.
    WebClient request = new WebClient();

    // This example assumes the FTP site uses anonymous logon.
    request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
    try
    {
        byte [] newFileData = request.DownloadData (serverUri.ToString());
        string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
        Console.WriteLine(fileString);
    }
    catch (WebException e)
    {
        Console.WriteLine(e.ToString());
    }
    return true;
}

--  作者:有点蓝
--  发布时间:2022/3/3 20:35:00
--  
6楼估计还是pasv的问题。

微软的文档里可以选择看vb的代码的