A
alshir
Gast
Hallo zusammen,
ich habe ein kleines Programm geschrieben, mit dem ich eine Datei versenden kann. Soweit funktioniert das ganze auch ganz gut. Allerdings gibt es einige kleinere Probleme, bei denn ihr mir bestimmt helfen könnt.
1.) Meine Methode getActualIP liefert mir auch schön meine aktuelle IP zurück. Leider die falsche. Denn sie leifert mir meine Netzwerk IP zurück und nicht meine Internet IP. Wie kann ich diese herausbekommen ??? Zur Info: Ich sitze hinter einem Router.
2.) Ich übergebe meinen beiden Methoden sendFile und receiveFile jeweils ein JTextField Objekt aus meiner GUI (wobei GUI für so ein kleiners Progrämmchen ein sehr überladener Begriff ist
). Diesem gebe ich jeweils einen neuen Inhalt - passend zum Status. Allerdings musste ich feststellen, dass sobald der Socket erzeugt wird keinerlei Veränderungen am Textfeld mehr stattfinden und meine Befehle einfach ignoriert werden. Erst nach dem schliessen des Sockets kann ich wieder den Inhalt ändern.
Warum ist das so ???
3.) Ich würde gerne den Dateinamen am Anfang des Streams mit übergeben. Wie mache ich das am besten, dass ich erst einen String in den Stream schreibe und danach eine Datei ??? Also dazu ist zu sagen, dass das schreiben ja kein Problem macht. Ich kann ja schliesslich reinschreiben was ich will, aber wie merke ich beim auslesen, dass das String Object zu Ende ist und die Datei anfängt ???
mfg
alshir
P.S.: Anbei mein Code
ich habe ein kleines Programm geschrieben, mit dem ich eine Datei versenden kann. Soweit funktioniert das ganze auch ganz gut. Allerdings gibt es einige kleinere Probleme, bei denn ihr mir bestimmt helfen könnt.
1.) Meine Methode getActualIP liefert mir auch schön meine aktuelle IP zurück. Leider die falsche. Denn sie leifert mir meine Netzwerk IP zurück und nicht meine Internet IP. Wie kann ich diese herausbekommen ??? Zur Info: Ich sitze hinter einem Router.
2.) Ich übergebe meinen beiden Methoden sendFile und receiveFile jeweils ein JTextField Objekt aus meiner GUI (wobei GUI für so ein kleiners Progrämmchen ein sehr überladener Begriff ist
Warum ist das so ???
3.) Ich würde gerne den Dateinamen am Anfang des Streams mit übergeben. Wie mache ich das am besten, dass ich erst einen String in den Stream schreibe und danach eine Datei ??? Also dazu ist zu sagen, dass das schreiben ja kein Problem macht. Ich kann ja schliesslich reinschreiben was ich will, aber wie merke ich beim auslesen, dass das String Object zu Ende ist und die Datei anfängt ???
mfg
alshir
P.S.: Anbei mein Code
Code:
import java.net.*;
import java.io.*;
import javax.swing.JTextField;
public class FileSend {
public FileSend() {
}
public static String getActualIP() throws java.net.UnknownHostException
{
return InetAddress.getLocalHost().getHostAddress();
}
public static void sendFile(JTextField status, File file, InetAddress address, int port) throws IOException
{
status.setText("Connecting to host: " + " Pillepalle ");
Socket server = new Socket(address, port);
status.setText("Transfering");
InetAddress ip = server.getLocalAddress();
try{
FileInputStream fis = new FileInputStream(file);
BufferedOutputStream out = new BufferedOutputStream( server.getOutputStream() );
byte[] buffer = new byte[1024];
byte temp;
try {
while( fis.read(buffer) != -1 ){
out.write(buffer);
}
}catch (IOException e){
System.err.println(e);
}
out.close();
fis.close();
status.setText("Upload complete");
}catch (FileNotFoundException e){
System.err.println(e);
}
server.close();
}
public static void receiveFile( JTextField status, String path ) throws IOException
{
ServerSocket server = new ServerSocket( 6667 );
server.setSoTimeout( 60000 );
Socket client = new Socket();
status.setText("Waiting for client");
client = server.accept();
status.setText("Transfering");
InputStream in = client.getInputStream();
File file = new File("c:/temp.txt");
FileOutputStream fos = new FileOutputStream(file);
byte buffer[] = new byte[1024];
while( in.read(buffer) != -1 ){
fos.write(buffer);
}
fos.close();
server.close();
status.setText("Download complete");
}
}