Fichier Java transfert de fichier vers le serveur


Je suis nouveau dans le réseau Java, et après avoir cherché une solution à mon problème pendant un certain temps maintenant, je me suis dit pourquoi ne pas demander conseil à des personnes plus qualifiées à ce sujet?

J'ai actuellement fait un petit outil qui gère un de mes serveurs, et un autre petit outil client. Mon objectif est que l'outil puisse envoyer des commandes du client à l'ordinateur serveur. De cette façon, je peux effectuer certaines actions sur l'ordinateur serveur à partir d'une autre machine, notamment envoi d'une archive zip avec des fichiers mis à jour.

J'ai la configuration de base: une connexion TCP qui envoie une commande du client au serveur (le serveur répond avec une confirmation), puis j'aimerais que l'action supposée ait lieu. Ma question est maintenant la suivante:

Lors de l'envoi d'un fichier (.zip) du client au serveur, dois-je l'envoyer via TCP ou utiliser quelque chose comme FTP? Je voudrais non seulement envoyer le fichier au serveur, mais aussi quand il est arrivé pour extraire et remplacer l'existant fichier.

Cordialement, Alex

EDIT: C'est ce que j'ai utilisé pour transférer un fichier du client vers le serveur, mais le fichier n'atteint pas la destination en taille réelle.. D:

Serveur

package server.control.net.impl;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Update implements Runnable {

    private final static int serverPort = 5555;
    private final static String fileInput = "C:\\Users\\Alexander\\Documents\\update.zip";

    public static void main(String args[]) throws IOException{
        ServerSocket servsock = new ServerSocket(serverPort);
        File myFile = new File(fileInput);
        while (true) {
          Socket sock = servsock.accept();
          byte[] mybytearray = new byte[(int) myFile.length()];
          BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile));
          bis.read(mybytearray, 0, mybytearray.length);
          OutputStream os = sock.getOutputStream();
          os.write(mybytearray, 0, mybytearray.length);
          os.flush();
          sock.close();
        }
    }

    public static void start(){
        Update upd = new Update();  
        Thread tupd = new Thread(upd);  
        tupd.start(); 
    }

    @Override
    public void run() {

    }
}

Clients

package server.control.net;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {

    private final static String serverIP = "127.0.0.1";
    private final static int serverPort = 5555;
    private final static String fileOutput = "C:\\Users\\Alexander\\Documents\\updateoutput.zip";

    public static void main(String args[]) throws UnknownHostException, IOException {
        Socket sock = new Socket(serverIP, serverPort);
        byte[] mybytearray = new byte[1024];
        InputStream is = sock.getInputStream();
        FileOutputStream fos = new FileOutputStream(fileOutput);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int bytesRead = is.read(mybytearray, 0, mybytearray.length);
        bos.write(mybytearray, 0, bytesRead);
        bos.close();
        sock.close();
    }
}
Author: aekramer, 2015-08-27

1 answers

Vous n'avez pas obtenu InputStream du socket après serverSocket.accept(). Ouvrez InputStream sur la prise.

    clientSocket = serverSocket.accept();

    InputStream in = clientSocket.getInputStream();

    // Writing the file to disk
    // Instantiating a new output stream object
    OutputStream output = new FileOutputStream("YourFile.zip");

    byte[] buffer = new byte[1024];
    while ((bytesRead = in.read(buffer)) != -1) {
        output.write(buffer, 0, bytesRead);
    }
    // Closing the FileOutputStream handle
    output.close();

Reportez-vous à l'exemple de travail à: Écrire et lire le fichier sur Socket

 6
Author: Ravindra babu, 2016-07-12 11:32:36