Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# STOR命令破坏与FTP服务器的连接_C#_Ftp - Fatal编程技术网

C# STOR命令破坏与FTP服务器的连接

C# STOR命令破坏与FTP服务器的连接,c#,ftp,C#,Ftp,我正在用C编写FTP客户端。我键入方法将文件上载到FTP服务器,文件上载确实有效。但是,在成功传输数据之后,客户端将从服务器断开连接。以下是我要做的步骤: 1.使用PASV从服务器获取IP和端口。 2.使用IP和端口创建与服务器的数据连接。 3.将文件转换为字节并通过数据连接发送。 4.通过命令连接发送STOR 我的问题是为什么我会断开连接 public void PrepareUpload() // Get IP and Port from server by using PASV.

我正在用C编写FTP客户端。我键入方法将文件上载到FTP服务器,文件上载确实有效。但是,在成功传输数据之后,客户端将从服务器断开连接。以下是我要做的步骤: 1.使用PASV从服务器获取IP和端口。 2.使用IP和端口创建与服务器的数据连接。 3.将文件转换为字节并通过数据连接发送。 4.通过命令连接发送STOR

我的问题是为什么我会断开连接

public void PrepareUpload() // Get IP and Port from server by using PASV.
        {
            String answer;
            String message = "PASV\r\n";
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
            this.ns.Write(data, 0, data.Length);      
            answer = Response(this.ns);
            this.dataPort = getPort(answer, 4) * 256 + getPort(answer, 5);
        }

public void DataConnect(string server) // Create DATA connection with server using IP and port.
        {
            int port = this.dataPort;
            this.dataConnection = new TcpClient();
            IPAddress ipAddress = Dns.GetHostEntry(server).AddressList[0];

            this.dataConnection.Connect(ipAddress, port);
            this.nds = dataConnection.GetStream();  
        }

public void DataTransfer(string filename) // Convert file to bytes and send through DATA connection.
        {
            byte[] data = System.IO.File.ReadAllBytes(filename);
            this.filename = Path.GetFileName(filename);
            nds.Write(data, 0, data.Length);
        }

public void Upload() // Send STOR through COMMAND connection
        {
            String message = "STOR " + this.filename + "\r\n";
            Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
            this.ns.Write(data, 0, data.Length);
        }

你描述的顺序是错误的。特别是,在发出命令之前,您不应启动数据传输,该命令指定传输数据(即STOR)应发生的情况。正确的顺序是:

使用PASV或PORT命令确定数据端口并获取对此命令的响应。如果是端口,请在给定的IP:端口上侦听。 发送STOR命令并读取响应。这应该是一个初步的答复。 创建数据连接:使用PASV连接到远程主机,使用端口等待传入连接。 传输数据并关闭数据连接。 等待最后的答复226。
不要将代码作为图像发布。以text+的形式发布,而且您的代码没有显示,这些方法如何调用+解释,您如何检测断开连接-到底发生了什么网络捕获或至少服务器日志也会很有用。成功上传后,我尝试使用我实现的其他功能:目录更改、NLIST功能、RETR功能。成功上传文件后,我没有收到服务器端的响应。如果文件上传失败或者它甚至没有被使用,其他功能也可以正常工作。没有响应和断开连接是两码事。如果你需要我们的帮助,你需要准确。并提供我要求您提供的信息。为什么不使用C上附带的工具连接到FTP服务器?检查FtpWebRequest。不允许在我们的作业中使用这些库。我确实更改了顺序,就像在您的示例中一样。文件已成功上载到服务器上。然而,这和文章中解释的问题是一样的。我在第二步没有得到任何回应!networkStream.database可用。然而,第5步我得到150确定发送data@user7038346:我在您的代码中看不到任何在发送STOR后从服务器读取响应的内容。快速检查一个正在工作的FTP客户端和该服务器,可以发现我给出的命令正是正在工作的命令,即首先读取对STOR的响应,然后通过数据连接连接到服务器。虽然我不熟悉.NET,但我认为如果响应已经存在,就不应该检查DataAvailable:因为只有在收到命令后服务器才会发送它,所以应该等待响应。