gpt4 book ai didi

java - 227进入被动模式(124,153,94,30,242,138)

转载 作者:行者123 更新时间:2023-11-29 05:35:39 25 4
gpt4 key购买 nike

我正在使用 SimpleFTP.java 代码通过 FTP 上传图像。我收到标题中提到的错误并且无法上传图片。它只是将图像保存在数据库中,大小为 0KB。请帮我解决这个问题,因为我搜索了一整天但找不到正确的解决方案。

public class SimpleFTP {


/**
* Create an instance of SimpleFTP.
*/
public SimpleFTP() {

}


/**
* Connects to the default port of an FTP server and logs in as
* anonymous/anonymous.
*/
public synchronized void connect(String host) throws IOException {
connect(host, 21);
}


/**
* Connects to an FTP server and logs in as anonymous/anonymous.
*/
public synchronized void connect(String host, int port) throws IOException {
connect(host, port, "anonymous", "anonymous");
}


/**
* Connects to an FTP server and logs in with the supplied username
* and password.
*/
public synchronized void connect(String host, int port, String user, String pass) throws IOException {
if (socket != null) {
throw new IOException("SimpleFTP is already connected. Disconnect first.");
}
socket = new Socket(host, port);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

String response = readLine();
if (!response.startsWith("220 ")) {
throw new IOException("SimpleFTP received an unknown response when connecting to the FTP server: " + response);
}

sendLine("USER " + user);

response = readLine();
if (!response.startsWith("331 ")) {
throw new IOException("SimpleFTP received an unknown response after sending the user: " + response);
}

sendLine("PASS " + pass);

response = readLine();
if (!response.startsWith("230 ")) {
throw new IOException("SimpleFTP was unable to log in with the supplied password: " + response);
}

}
/**
* Disconnects from the FTP server.
*/
public synchronized void disconnect() throws IOException {
try {
sendLine("QUIT");
} finally {
socket = null;
}
}


/**
* Returns the working directory of the FTP server it is connected to.
*/
public synchronized String pwd() throws IOException {
sendLine("PWD");
String dir = null;
String response = readLine();
if (response.startsWith("257 ")) {
int firstQuote = response.indexOf('\"');
int secondQuote = response.indexOf('\"', firstQuote + 1);
if (secondQuote > 0) {
dir = response.substring(firstQuote + 1, secondQuote);
}
}
return dir;
}


/**
* Changes the working directory (like cd). Returns true if successful.
*/
public synchronized boolean cwd(String dir) throws IOException {
sendLine("CWD " + dir);
String response = readLine();
return (response.startsWith("250 "));
}


/**
* Sends a file to be stored on the FTP server.
* Returns true if the file transfer was successful.
* The file is sent in passive mode to avoid NAT or firewall problems
* at the client end.
*/
public synchronized boolean stor(File file) throws IOException {
if (file.isDirectory()) {
throw new IOException("SimpleFTP cannot upload a directory.");
}

String filename = file.getName();

return stor(new FileInputStream(file), filename);
}


/**
* Sends a file to be stored on the FTP server.
* Returns true if the file transfer was successful.
* The file is sent in passive mode to avoid NAT or firewall problems
* at the client end.
*/
public synchronized boolean stor(InputStream inputStream, String filename) throws IOException {

BufferedInputStream input = new BufferedInputStream(inputStream);

sendLine("PASV");
String response = readLine();//227
Log.e("RESPONSE ", response);
if (!response.startsWith("200 ") && !response.startsWith("227 ")) {
throw new IOException("SimpleFTP could not request passive mode: " + response);
}

String ip = null;
int port = -1;
int opening = response.indexOf('(');
int closing = response.indexOf(')', opening + 1);
if (closing > 0) {
String dataLink = response.substring(opening + 1, closing);
StringTokenizer tokenizer = new StringTokenizer(dataLink, ",");
try {
ip = tokenizer.nextToken() + "." + tokenizer.nextToken() + "." + tokenizer.nextToken() + "." + tokenizer.nextToken();
port = Integer.parseInt(tokenizer.nextToken()) * 256 + Integer.parseInt(tokenizer.nextToken());
//Log.e("FTP ",String.valueOf(port)+" P "+String.valueOf(port));
} catch (Exception e) {
throw new IOException("SimpleFTP received bad data link information: " + response);
}
}

sendLine("STOR " + filename);

Socket dataSocket = new Socket(ip, port);

response = readLine();
if (!response.startsWith("150 ")) {
throw new IOException("SimpleFTP was not allowed to send the file: " + response);
}

BufferedOutputStream output = new BufferedOutputStream(dataSocket.getOutputStream());
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
output.flush();
output.close();
input.close();

response = readLine();
return response.startsWith("226 ");
}


/**
* Enter binary mode for sending binary files.
*/
public synchronized boolean bin() throws IOException {
sendLine("TYPE I");
String response = readLine();
return (response.startsWith("200 "));
}


/**
* Enter ASCII mode for sending text files. This is usually the default
* mode. Make sure you use binary mode if you are sending images or
* other binary data, as ASCII mode is likely to corrupt them.
*/
public synchronized boolean ascii() throws IOException {
sendLine("TYPE A");
String response = readLine();
return (response.startsWith("200 "));
}


/**
* Sends a raw command to the FTP server.
*/
private void sendLine(String line) throws IOException {
if (socket == null) {
throw new IOException("SimpleFTP is not connected.");
}
try {
writer.write(line + "\r\n");
writer.flush();
if (DEBUG) {
System.out.println("> " + line);
}
} catch (IOException e) {
socket = null;
throw e;
}
}

private String readLine() throws IOException {
String line = reader.readLine();
if (DEBUG) {
System.out.println("< " + line);
}
return line;
}

private Socket socket = null;
private BufferedReader reader = null;
private BufferedWriter writer = null;

private static boolean DEBUG = false;


}

最佳答案

我得到了答案。它的格式是

227 Entering Passive Mode (h1,h2,h3,h4,p1,p2) 其中 h1 到 h4 是格式为 h1:h2:h3:h4 的主机 ID,p1 -p2 是它阻塞的端口格式 p1*256+p2

关于java - 227进入被动模式(124,153,94,30,242,138),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19603593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com