>  기사  >  Java  >  while 루프 문을 사용하여 Java에서 주요 링크를 처리하는 방법

while 루프 문을 사용하여 Java에서 주요 링크를 처리하는 방법

WBOY
WBOY앞으로
2023-04-25 10:26:031227검색

Java code

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

RemoteFileServer에 대한 큰 변경 사항이 이 메서드에 반영됩니다. 서버가 연결을 수락한 후에도 여전히 handlerConnection()을 호출하지만 이제 Runnable인 ConnectionHandler 인스턴스에 소켓을 전달합니다. ConnectionHandler를 사용하여 새 스레드를 생성하고 시작합니다. ConnectionHandler의 run() 메소드에는 소켓 읽기/쓰기 및 파일 읽기를 위한 코드가 포함되어 있으며 이는 원래 RemoteFileServer의 handlerConnection()에 있습니다.

4. 연결 처리: 2부

다음은 ConnectionHandler 클래스의 구조입니다.

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

이 도우미 클래스는 매우 간단합니다. 지금까지의 다른 클래스와 마찬가지로 java.net 및 java.io를 가져옵니다. 이 클래스에는 이 인스턴스가 처리하는 소켓을 보유하는 하나의 인스턴스 변수인 SocketToHandle만 있습니다. 클래스의 생성자는 Socket 인스턴스를 매개변수로 사용하고 이를 SocketToHandle에 할당합니다.

이 클래스는 Runnable 인터페이스를 구현한다는 점에 유의하세요. 이 인터페이스를 구현하는 클래스는 우리 클래스가 수행하는 run() 메서드를 구현해야 합니다. 나중에 run()의 세부 사항을 살펴보겠습니다. 이제 앞서 RemoteFileServer 클래스에서 본 것과 동일한 코드를 사용하여 실제로 연결을 처리한다는 점만 알아두세요.

run() 구현

여기서 연결 스트림을 가져오고 이를 사용하여 연결을 읽고 쓰고 작업이 완료된 후 닫는 run() 메서드를 구현합니다.

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

ConnectionHandler run() 메서드는 RemoteFileServer의 handlerConnection()이 수행하는 작업을 수행합니다. 먼저, (소켓의 getOutputStream()과 getInputStream()을 사용하여) InputStream과 OutputStream을 각각 BufferedReader와 PrintWriter로 래핑합니다. 그런 다음 이 코드를 사용하여 대상 파일을 한 줄씩 읽습니다.

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

클라이언트에서 유효한 파일 경로를 가져와야 하므로 해당 경로 이름으로 새 파일을 구성하고 읽기를 처리하기 위해 FileReader에 래핑합니다. 그런 다음 파일을 한 줄씩 읽을 수 있는 BufferedReader로 래핑합니다. 읽을 줄이 더 이상 없을 때까지 Java while 루프의 BufferedReader에서 readLine()을 호출합니다. readLine() 호출은 바이트가 올 때까지 차단됩니다. 일부 바이트를 얻은 후 이를 로컬 라인 변수에 넣고 클라이언트에 씁니다.

위 내용은 while 루프 문을 사용하여 Java에서 주요 링크를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제