Hi,
ich hab nen kleines Problem mit ftp und Java. Ich hab eine FTP connection mit Java programmiert und das funktioniert alles (wobei ich nicht alles selber geschrieben hab, da ich am Anfang keine Ahnung hatte wie man das ueberhaupt macht). Ich kann also Files uploaden und downloaden und noch so nen paar tolle Sachen.
Mein Problem ist, dass ich einen String an eine File auf dem Server anhaengen will. Also hab ich das mal ausprobiert und hab bekomme immer den Server Code 451, was ja bedeutet das es nicht funktioniert.
Ich habe mein Webspace bei webmasterwork und zwar der alte auf den man mit ftp zugreifen kann.
Hier ist mein Code fiuer das Anhaengen eines Strings an eine File:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
public boolean append(String serverPath, String string) throws IOException, Exception
{
StringBufferInputStream infile = new StringBufferInputStream(string);
boolean success = executeDataCommand("APPE " + serverPath, infile);
infile.close();
return success;
}
|
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public boolean executeDataCommand(String command, InputStream in)
throws IOException
{
// Open a data socket on this computer
ServerSocket serverSocket = new ServerSocket(0);
if (!setupDataPort(command, serverSocket))
{System.out.println("Here is the problem");return false;}
Socket clientSocket = serverSocket.accept();
// Transfer the data
OutputStream out = clientSocket.getOutputStream();
transferData(in, out);
// Clean up the data structures
out.close();
clientSocket.close();
serverSocket.close();
return isSuccessfullResponse(getServerResponseCode());
}
|
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
private boolean setupDataPort(String command, ServerSocket server) throws IOException
{
if(! openPort(server)) return false;
outStream.println("type i");
if(! isSuccessfullResponse(getServerResponseCode()))
{
error("Could not set Transfer type");
return false;
}
outStream.println(command);
int i = getServerResponseCode();
System.out.println(i);
return isInformationalResponse(i);
}
|
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
private boolean openPort(ServerSocket server) throws IOException
{
int localport = server.getLocalPort();
InetAddress inetaddress = server.getInetAddress();
InetAddress localip;
try
{
localip = inetaddress.getLocalHost();
}
catch(UnknownHostException e)
{
error("Can't get local host");
return false;
}
byte[] addrbytes = localip.getAddress();
short addrshorts[] = new short[4];
for(int i=0; i<=3; i++)
{
addrshorts[i] = addrbytes[i];
if(addrshorts[i] < 0)
addrshorts[i] += 256;
}
outStream.println("port "+addrshorts[0]+","+addrshorts[1]+","+addrshorts[2]+","+addrshorts[3]+","+((localport & 0xff00) >> 8) + "," + (localport & 0x00ff));
return isSuccessfullResponse(getServerResponseCode());
}
|
|
Quellcode
|
1
2
3
4
5
6
7
|
private void transferData(InputStream in, OutputStream out) throws IOException
{
byte b[] = new byte[4096];
int amount;
while((amount = in.read(b)) > 0)
out.write(b, 0, amount);
}
|
OK, damit habt ihr den Code fuer das Anhaengen von Strings.
Ihr muesst das ja nicht alles lesen, wenn ihr wisst was die Serverantwort bedeutet und was ich machen muss.
Danke