Heim  >  Artikel  >  Java  >  So verwenden Sie While-Schleifenanweisungen zum Verarbeiten wichtiger Links in Java

So verwenden Sie While-Schleifenanweisungen zum Verarbeiten wichtiger Links in Java

WBOY
WBOYnach vorne
2023-04-25 10:26:031173Durchsuche

Javacode

<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>

Die großen Änderungen, die wir an RemoteFileServer vorgenommen haben, spiegeln sich in dieser Methode wider. Wir rufen immer noch handleConnection() auf, nachdem der Server eine Verbindung akzeptiert hat, aber jetzt übergeben wir den Socket an eine Instanz von ConnectionHandler, die ausführbar ist. Wir erstellen mit ConnectionHandler einen neuen Thread und starten ihn. Die run()-Methode von ConnectionHandler enthält den Code zum Lesen/Schreiben von Sockets und zum Lesen von Dateien, der ursprünglich in handleConnection() von RemoteFileServer enthalten ist.

4. Umgang mit Verbindungen: Teil 2

Hier ist die Struktur der ConnectionHandler-Klasse:

Java-Code

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() {  }
#🎜🎜 # Diese Hilfsklasse ist recht einfach. Wie unsere anderen Klassen bisher importieren wir java.net und java.io . Diese Klasse verfügt nur über eine Instanzvariable, socketToHandle, die den von dieser Instanz verarbeiteten Socket enthält. Der Konstruktor der Klasse nimmt eine Socket-Instanz als Parameter und weist sie socketToHandle zu.

Bitte beachten Sie, dass diese Klasse die Runnable-Schnittstelle implementiert. Klassen, die diese Schnittstelle implementieren, müssen die run()-Methode implementieren, was unsere Klasse tut. Wir werden die Details von run() später untersuchen. Jetzt wissen Sie nur noch, dass die Verbindung tatsächlich mit demselben Code verarbeitet wird, den wir zuvor in der RemoteFileServer-Klasse gesehen haben.

Run() implementieren

Hier implementieren wir die run()-Methode, die den Stream unserer Verbindung erfasst, ihn zum Lesen und Schreiben der Verbindung verwendet und anschließend Die Aufgabe ist abgeschlossen. Schließen Sie sie:

Java-Code

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);  }  }
Was die run()-Methode des ConnectionHandlers tut, ist das, was handleConnection() auf dem RemoteFileServer tut. Zuerst verpacken wir InputStream und OutputStream (mithilfe von getOutputStream() und getInputStream() von Socket) in BufferedReader bzw. PrintWriter. Dann verwenden wir diese Codes, um die Zieldatei Zeile für Zeile zu lesen:

Java-Code

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);  }
Bitte denken Sie daran, dass wir vom Client einen gültigen Dateipfad erhalten sollten, also verwenden Sie diesen Pfadname erstellt eine neue Datei, verpackt sie in einen FileReader, um den Vorgang des Lesens der Datei abzuwickeln, und verpackt sie dann in einen BufferedReader, damit wir die Datei Zeile für Zeile lesen können. Wir rufen readLine() für den BufferedReader in einer Java-While-Schleifenanweisung auf, bis keine Zeilen mehr zum Lesen vorhanden sind. Bitte beachten Sie, dass der Aufruf von readLine() blockiert, bis ein Byte eintrifft. Nachdem wir einige Bytes erhalten haben, fügen wir sie in die lokale Zeilenvariable ein und schreiben sie an den Client.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie While-Schleifenanweisungen zum Verarbeiten wichtiger Links in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen