Maison > Java > javaDidacticiel > Comment utiliser les instructions de boucle while pour traiter les liens clés en Java

Comment utiliser les instructions de boucle while pour traiter les liens clés en Java

WBOY
Libérer: 2023-04-25 10:26:03
avant
1238 Les gens l'ont consulté

Code Java

<ol class=" list-paddingleft-2">
<li><p>public void handleConnection(Socket connectionToHandle) {   </p></li>
<li><p>new Thread(new ConnectionHandler(connectionToHandle)).<br>start();   </p></li>
<li><p>}   </p></li>
<li><p>public void handleConnection(Socket connectionToHandle) {  </p></li>
<li><p>new Thread(new ConnectionHandler(connectionToHandle)).<br>start();  </p></li>
<li><p>} </p></li>
</ol>
Copier après la connexion

Les grands changements que nous avons apportés à RemoteFileServer se reflètent dans cette méthode. Nous appelons toujours handleConnection() une fois que le serveur a accepté une connexion, mais nous passons maintenant le Socket à une instance de ConnectionHandler, qui est Runnable. Nous créons un nouveau Thread avec ConnectionHandler et le démarrons. La méthode run() de ConnectionHandler contient le code pour la lecture/écriture de Socket et la lecture de fichier, qui se trouve à l'origine dans handleConnection() de RemoteFileServer.

4. Gestion des connexions : Partie 2

Voici la structure de la classe ConnectionHandler :

Code Java

import java.io.*;   import java.net.*;   public class ConnectionHandler implements Runnable{   Socket socketToHandle;   public ConnectionHandler(Socket aSocketToHandle) {   socketToHandle = aSocketToHandle;   }   public void run() {   }   }   import java.io.*;  import java.net.*;  public class ConnectionHandler implements Runnable{  Socket socketToHandle;  public ConnectionHandler(Socket aSocketToHandle) {  socketToHandle = aSocketToHandle;  }  public void run() {  }
Copier après la connexion

Cette classe d'assistance est assez simple. Comme nos autres classes jusqu'à présent, nous importons java.net et java.io . Cette classe n'a qu'une seule variable d'instance, socketToHandle, qui contient le Socket géré par cette instance. Le constructeur de la classe prend une instance Socket comme paramètre et l'assigne à socketToHandle.

Veuillez noter que cette classe implémente l'interface Runnable. Les classes qui implémentent cette interface doivent implémenter la méthode run(), ce que fait notre classe. Nous explorerons les détails de run() plus tard. Sachez maintenant qu'il gérera réellement la connexion, en utilisant le même code que nous avons vu précédemment dans la classe RemoteFileServer.

Implémentation de run()

Ici, nous implémentons la méthode run(), qui récupérera le flux de notre connexion, l'utilisera pour lire et écrire la connexion, et la fermera une fois la tâche terminée :

Code Java

public void run() {   try {   PrintWriter streamWriter = new PrintWriter(socketToHandle.getOutputStream());   BufferedReader streamReader =   new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));   String fileToRead = streamReader.readLine();   BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));   String line = null;   while ((line = fileReader.readLine()) != null)   streamWriter.println(line);   fileReader.close();   streamWriter.close();   streamReader.close();   } catch (Exception e) {   System.out.println("Error handling a client: " + e);   }   }   public void run() {  try {  PrintWriter streamWriter = new PrintWriter(socketToHandle.getOutputStream());  BufferedReader streamReader =  new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));  String fileToRead = streamReader.readLine();  BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));  String line = null;  while ((line = fileReader.readLine()) != null)  streamWriter.println(line);  fileReader.close();  streamWriter.close();  streamReader.close();  } catch (Exception e) {  System.out.println("Error handling a client: " + e);  }  }
Copier après la connexion

ConnectionHandler La méthode run() fait ce que fait handleConnection() sur RemoteFileServer. Tout d’abord, nous encapsulons InputStream et OutputStream (en utilisant getOutputStream() et getInputStream() de Socket respectivement dans BufferedReader et PrintWriter. Nous utilisons ensuite ce code pour lire le fichier cible ligne par ligne :

Code Java

FileReader fileReader = new FileReader(new File(streamReader.readLine()));   BufferedReader bufferedFileReader = new BufferedReader(fileReader);   String line = null;   while ((line = bufferedFileReader.readLine()) != null) {   streamWriter.println(line);   }   FileReader fileReader = new FileReader(new File(streamReader.readLine()));  BufferedReader bufferedFileReader = new BufferedReader(fileReader);  String line = null;  while ((line = bufferedFileReader.readLine()) != null) {  streamWriter.println(line);  }
Copier après la connexion

N'oubliez pas que nous devons obtenir un chemin de fichier valide du client, alors construisez un nouveau fichier avec ce nom de chemin, enveloppez-le dans un FileReader pour gérer la lecture le fichier, puis l'enveloppe dans un BufferedReader qui nous permet de lire le fichier ligne par ligne. Nous appelons readLine() sur BufferedReader dans une instruction Java while jusqu'à ce qu'il n'y ait plus de lignes à lire. Veuillez noter que l'appel à readLine() se bloquera jusqu'à ce qu'un octet arrive. Après avoir récupéré quelques octets, nous les mettons dans la variable de ligne locale et les écrivons au client.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal