Rumah > Java > javaTutorial > teks badan

Cara menggunakan penyataan gelung while untuk memproses pautan utama dalam Java

WBOY
Lepaskan: 2023-04-25 10:26:03
ke hadapan
1223 orang telah melayarinya

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>
Salin selepas log masuk

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() {  }
Salin selepas log masuk

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);  }  }
Salin selepas log masuk

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);  }
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan