Rumah  >  Artikel  >  Java  >  Cara menggunakan penyataan gelung while untuk memproses pautan utama dalam Java

Cara menggunakan penyataan gelung while untuk memproses pautan utama dalam Java

WBOY
WBOYke hadapan
2023-04-25 10:26:031173semak imbas

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

Perubahan besar yang kami buat pada RemoteFileServer ditunjukkan dalam kaedah ini. Kami masih memanggil handleConnection() selepas pelayan menerima sambungan, tetapi kini kami menghantar Soket kepada contoh ConnectionHandler, iaitu Runnable. Kami mencipta Thread baharu dengan ConnectionHandler dan memulakannya. Kaedah run() ConnectionHandler mengandungi kod untuk membaca/menulis dan membaca Fail Soket, yang pada asalnya dalam handleConnection() RemoteFileServer.

4. Mengendalikan Sambungan: Bahagian 2

Berikut ialah struktur kelas ConnectionHandler:

Kod 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() {  }

Kelas pembantu ini agak ringkas. Seperti kelas kami yang lain setakat ini, kami mengimport java.net dan java.io . Kelas ini hanya mempunyai satu pembolehubah contoh, socketToHandle, yang memegang Socket yang dikendalikan oleh tika ini. Pembina kelas mengambil contoh Socket sebagai parameter dan memberikannya kepada socketToHandle.

Sila ambil perhatian bahawa kelas ini melaksanakan antara muka Runnable. Kelas yang melaksanakan antara muka ini mesti melaksanakan kaedah run(), iaitu yang dilakukan oleh kelas kami. Kami akan meneroka butiran run() kemudian. Sekarang baru tahu bahawa ia sebenarnya akan mengendalikan sambungan, menggunakan kod yang sama yang kita lihat sebelum ini dalam kelas RemoteFileServer.

Laksanakan run()

Di sini kami melaksanakan kaedah run(), yang akan merebut aliran sambungan kami, menggunakannya untuk membaca dan menulis pada sambungan, dan menutupnya selepas tugasan selesai:

Kod 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);  }  }

Apa kaedah run() ConnectionHandler lakukan ialah apa yang handleConnection() pada RemoteFileServer lakukan. Mula-mula, kami membungkus InputStream dan OutputStream (menggunakan getOutputStream() Socket dan getInputStream()) masing-masing ke dalam BufferedReader dan PrintWriter. Kami kemudian menggunakan kod ini untuk membaca fail sasaran baris demi baris:

Kod 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);  }

Ingat bahawa kita harus mendapatkan laluan fail yang sah daripada klien, jadi bina dengan nama laluan itu A baru Fail, bungkusnya dalam FileReader untuk mengendalikan pembacaan fail, dan kemudian bungkusnya dalam BufferedReader untuk membolehkan kami membaca fail baris demi baris. Kami memanggil readLine() pada BufferedReader dalam pernyataan gelung Java while sehingga tiada lagi baris untuk dibaca. Sila ambil perhatian bahawa panggilan ke readLine() akan disekat sehingga bait datang. Selepas kami mendapat beberapa bait, kami meletakkannya ke dalam pembolehubah baris tempatan dan menulisnya kepada klien.

Atas ialah kandungan terperinci Cara menggunakan penyataan gelung while untuk memproses pautan utama dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam