Java で while ループ ステートメントを使用して主要なリンクを処理する方法
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>
RemoteFileServer に加えた大きな変更は、このメソッドに反映されています。サーバーが接続を受け入れた後も handleConnection() を呼び出しますが、今度は、Runnable である ConnectionHandler のインスタンスにソケットを渡します。 ConnectionHandler を使用して新しいスレッドを作成し、開始します。 ConnectionHandler の run() メソッドには、もともと RemoteFileServer の handleConnection() にある、ソケットの読み取り/書き込みとファイルの読み取りのためのコードが含まれています。
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 が 1 つだけあります。クラスのコンストラクターは、Socket インスタンスをパラメーターとして受け取り、それをソケットToHandle に割り当てます。
このクラスは Runnable インターフェイスを実装していることに注意してください。このインターフェイスを実装するクラスは run() メソッドを実装する必要があります。これがこのクラスの機能です。 run() の詳細については後で説明します。ここで、RemoteFileServer クラスで前に見たのと同じコードを使用して、実際に接続を処理することを知っておいてください。
run() の実装
ここでは、run() メソッドを実装します。このメソッドは、接続のストリームを取得し、それを使用して接続の読み取りと書き込みを行い、タスクが終了した後に接続を閉じます。 completed:
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 の handleConnection() が行うことと同じです。まず、InputStream と OutputStream (Socket の getOutputStream() と getInputStream() を使用) をそれぞれ BufferedReader と PrintWriter にラップします。次に、次のコードを使用してターゲット ファイルを 1 行ずつ読み取ります。
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); }
新しいファイルを構築できるように、クライアントから有効なファイル パスを取得する必要があることに注意してください。そのパス名 File を持つファイルを作成し、それを FileReader にラップしてファイルの読み取りを処理し、次にそれを BufferedReader にラップして、ファイルを 1 行ずつ読み取ることができるようにします。読み取る行がなくなるまで、Java の while ループで BufferedReader の readLine() を呼び出します。 readLine() の呼び出しは、バイトが到着するまでブロックされることに注意してください。いくつかのバイトを取得したら、それらをローカルの line 変数に入れてクライアントに書き込みます。
以上がJava で while ループ ステートメントを使用して主要なリンクを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです
