File Transfer

Status
Nicht offen für weitere Antworten.
N

Njoerd

Gast
Hallo also ich hab da ein problem bezüglich file transfer zwischen client und server.
Meine verbindung steht, aber wie sende ich jetz am besten datein zwsichen client und server?

hab folgendes ausprobiert:
Code:
import java.io.*;
import java.net.*;
 
public class PutGet {
    private int port = 4321;
 
    public void get(String strCarrier) throws IOException{
	Socket socket = new Socket(InetAddress.getLocalHost(), port);
	InputStream is = socket.getInputStream();
	FileOutputStream fos=new FileOutputStream(strCarrier);
	byte[] buffer=new byte[1024];
	int cnt;
	while ((cnt=is.read(buffer))!=-1){
	    fos.write(buffer, 0, cnt);
	}
	System.err.println();
	fos.close();
    }
 
    public void put(String strCarrier) throws IOException{
	try {
	    ServerSocket serversocket = new ServerSocket(port);
	    System.out.println("accepting connections to port " + port);
	    Socket socket = serversocket.accept();
	    File fileSend = new File(strCarrier);
	    OutputStream os=socket.getOutputStream();
	    FileInputStream fis=new FileInputStream(fileSend);
	    byte[] buffer=new byte[1024];
	    int cnt;
	    while ((cnt=fis.read(buffer))!=-1){
		os.write(buffer, 0, cnt);
	    }
	    System.err.println();
	    fis.close();
	    socket.close();
	} catch(Exception e){
	    e.printStackTrace();
	}
    }
    public static void main (String[] args) {
	try {
	    if (args != null && args.length > 1 && args[1] != null && args[0].equals("put")) {
		new PutGet().put(args[1]);
	    } else if (args[0].equals("get")) {
		new PutGet().get(args[1]);
	    } else {
		System.err.println("[put|get] filename");
		System.exit(-1);
	    }
	    System.exit(0);
	} catch (IOException e) {
	    e.printStackTrace();
	    System.exit(-1);
	}
    }    
}

Am server terminiert mein stream auch(also beim senden) aber leider nicht beim empfangen.
Mir irgendwie auch verständlich, da er ja niemals "-1" empfangen kann und die while schleife somit nicht ausläuft.

Gibts dazu eine löscung oder hat jemand einen anderen vorschlag?
lg + danke für die hilfe
 
G

Guest

Gast
Hallo,

ich weiß zwar nicht, wie du dein Problem lösen kannst, aber mich würde auch interessieren, wie man eine Datei an einen Server schickt :wink:
 
N

Njoerd

Gast
Habe meine eigerne Lösung gefunden, falls sie mal wer braucht, ich poste sie hier
Code:
//s_in=DataInputStream
//s_out=DataOutputStream
 private boolean recieveFile(File filename) throws Exception{
        try{
        this.s_out.flush();
        long size=0;
        size=s_in.readLong();
        long comp_size=s_in.readLong();
        //filesize wird 2 mal übertragen um zu kontrollieren ob das richtige angekommen ist

        if(size!=comp_size)
            return false;
        //file öffnen
        System.out.println("Filesize: "+size);
        if(filename.exists())
            filename.delete();
        FileOutputStream fos=new FileOutputStream(filename);
        //file empfangen
        byte[] buffer=new byte[1024];
        int cnt=0;
        int sum=0;        
        while (sum<size){
           //falls die ist größe größer ist als die soll gr. abrruch
           if(cnt>=size)
               return false;
           cnt=is.read(buffer);
           fos.write(buffer, 0, cnt);
           sum+=cnt;
           System.out.println(sum+":"+size);
       }
       }catch(Exception e){System.out.println(e.toString());}
        return true;
    }
    
 public void sendFile(String file) throws Exception{
        File fileName=new File(file);
        long size=fileName.length();
        DataOutputStream dos=new DataOutputStream(os);
        dos.writeLong(size);
        dos.flush();
        dos.writeLong(size);
        dos.flush();
        System.out.println(size);
        //File öffnen
        FileInputStream fis=new FileInputStream(file);
        //file senden
        
        byte[] buffer=new byte[1024];
        int cnt=0;
        int sum=0;
        while ((cnt=fis.read(buffer))!=-1){
          os.write(buffer, 0, cnt);
          os.flush();
          sum+=cnt;
          //System.out.println(sum);
       }
       os.flush();
       fis.close();
        
    }

es wird so lange empfangen bis filesize erreicht, dann terminiert die while schleife
 
N

njoerd

Gast
sind ja "nur 2 funktionen"
ganz normal über socket
Code:
Socket s=new Socket(server,port);
...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V file transfer problem Netzwerkprogrammierung 2
D CSV File Upload Netzwerkprogrammierung 5
D Socket Gute Idee?: File als byte[] per ObjectIOStream übertragen Netzwerkprogrammierung 3
S Webserver für Jar File Netzwerkprogrammierung 4
H Applet soll XML-File auf Server speichern Netzwerkprogrammierung 6
R Apache HttpClient File Download? Netzwerkprogrammierung 3
0 Apache Commons File Object bekommen Netzwerkprogrammierung 4
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
M HTTP File Upload mit Prozessbar Funktioniert nicht. Netzwerkprogrammierung 8
5 File Upload/ ClassNotFoundException Netzwerkprogrammierung 9
S RSS-Feed aus ini File Netzwerkprogrammierung 4
Z File über Socket lesen Netzwerkprogrammierung 3
N Socket File über Socket vom Server an Client versenden Netzwerkprogrammierung 15
F Protokoll file:/// Netzwerkprogrammierung 2
B JNLP File -> Web Application Netzwerkprogrammierung 10
R HTTP HttpURLConnection Large File Upload Netzwerkprogrammierung 1
DStrohma RMI Security Manager & Policy-File Netzwerkprogrammierung 8
DeviAn Über ein Linux Server ein Windows Server nach einer File fragen Netzwerkprogrammierung 6
P java file.exists() zuzerstörbar Netzwerkprogrammierung 7
E java.net.SocketException: Unexpected end of file from server Netzwerkprogrammierung 2
G SMB-File ausführen Netzwerkprogrammierung 15
J Problem beim Senden von File Netzwerkprogrammierung 4
J Mit der File Api Dateien von anderen Rechnern lesen ? Netzwerkprogrammierung 3
I unc pfad für die klasse file? Netzwerkprogrammierung 4
E upload progress bei einem http file post Netzwerkprogrammierung 5
L file upload / download über http Netzwerkprogrammierung 5
P File von http-Server kopieren Netzwerkprogrammierung 5
D wie kann ich rmic ein .jar file übergeben? Netzwerkprogrammierung 3
R File chooser übers Netzwerk Netzwerkprogrammierung 3
J File upload mit ftp Netzwerkprogrammierung 4
G file download über https mit p12 Zertifikat Netzwerkprogrammierung 4
D Performance Problem beim File senden, empfangen Netzwerkprogrammierung 4
T file auf einen server laden Netzwerkprogrammierung 4
M RMI AbstractTableModel als Data Transfer Object (DTO) nutzen Netzwerkprogrammierung 0
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
A einfacher Transfer mit Applets Netzwerkprogrammierung 4
G HTTP Response mit Transfer-Encoding:chunked einlesen Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben