11
votes

Comment implémenter le serveur TCP et le client TCP dans Java pour transférer des fichiers

J'ai implémenter les classes de serveur TCP et TCP simples qui peuvent envoyer le message à partir du client au serveur et que le message sera converti en majuscule sur le côté serveur, mais comment puis-je obtenir des fichiers de transfert de serveur au client et à télécharger fichiers du client au serveur. Les codes suivants sont ce que j'ai.

tcpclient.java : xxx

tcpserver.java : < / p> xxx

donc, le tcpserver.java sera exécuté en premier, puis exécutez le tcpclient.java , et j'essaie Pour utiliser la clause IF dans le tcpserver.java Pour tester l'entrée de l'utilisateur, je souhaite désormais implémenter comment transférer des fichiers des deux côtés (téléchargement et téléchargement). Merci. < / p>


2 commentaires

Stackoverflow.com/Questtions/4687615/...


De plus, à toutes les réponses, vous pouvez lire tous les octets de n'importe quel fichier à la fois avec ReadallBytes (...) et écrivez-les à n'importe quel fichier avec écrire (...) .


3 Réponses :


1
votes

En supposant que vous souhaitez continuer à prendre en charge l'envoi de messages et à envoyer des fichiers ...

Comme vous l'avez maintenant, vous utilisez des Erriers pour envoyer des données de Client au serveur.

Vous pouvez utiliser cela pour envoyer n'importe quoi, comme le contenu des fichiers ...

Mais vous devrez définir un protocole entre votre client et votre serveur afin qu'ils sachent quand un fichier est transféré plutôt qu'un message de discussion.

Par exemple, vous pouvez envoyer le message / chaîne " filecoming " avant d'envoyer un fichier sur le serveur et qu'il saurait alors vous attendre aux octets d'un fichier. De même, vous auriez besoin d'un moyen de marquer la fin d'un fichier aussi ...

Alternativement, vous pouvez envoyer un type de message avant chaque message.

Une solution plus performante / réactive consiste à effectuer le transfert de fichier sur un thread / socket distinct - cela signifie que les messages de conversation ne sont pas retirés par les transferts. Chaque fois qu'un transfert de fichier est requis, une nouvelle connexion de thread / socket est créée pour cela.

~ chris


1 commentaires

Idéalement, vous auriez besoin d'une partie pour utiliser des prises séparées pour gérer les commandes. La façon dont il est fait avec FTP est qu'il y a un canal de commande et un canal de données.



4
votes

permet de supposer sur le côté serveur que vous avez reçu le nom du fichier et le chemin de fichier. Ce code devrait vous donner une idée.

serveur xxx

client xxx


0 commentaires

0
votes
import java.io.*;
import java.net.*;

class TCPClient
{
    public static void main(String argv[]) throws IOException
    {
      String sentence;
      String modifiedSentence;
      Socket clientSocket = new Socket("*localhost*", *portnum*); // new Socket("192.168.1.100", 80);
      System.out.println("Enter your ASCII code here");
      BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
      sentence = inFromUser.readLine();
//    System.out.println(sentence);

          while(!(sentence.isEmpty()))
          {          
              DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
              outToServer.writeBytes(sentence);

              BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
              modifiedSentence = inFromServer.readLine();

                  while(!(modifiedSentence.isEmpty()))
                  {                   
                      System.out.println("FROM SERVER: " + modifiedSentence);
                      break;
                  }

              System.out.println("Enter your ASCII code here");
              inFromUser = new BufferedReader( new InputStreamReader(System.in));
              sentence = inFromUser.readLine();
          }

      System.out.println("socket connection going to be close");    
      clientSocket.close();
    }

}

0 commentaires