この記事では、主に Java Socket について詳しく説明します。Socket は、ServerSocket と Socket の 2 つのカテゴリに分かれています。 JavaのSocketは通常のSocketとNioSocketの2種類に分けて紹介します。
ソケットを 2 つの都市間の交通手段に例えると、2 つの都市間を往復することができ、交通手段にはさまざまな種類があり、それぞれの交通手段にも対応する交通ルールがあります。ソケットも同様で、たくさんの種類があります。ほとんどの場合、安定した通信プロトコルである TCP/IP ストリーム ソケットが使用されます。 (TCP/IP と UDP の比較) Java のネットワーク通信は、Socket を介して実装されます。Socket は、ServerSocket と Socket の 2 つのカテゴリに分けられます。ServerSocket は、accept メソッドを介してリクエストを待機します。 Socket はリクエストをリッスンした後、特にデータ送信を完了するために使用され、クライアントは Socket を直接使用してリクエストを開始し、データを送信します。
ServerSocket の使用は 3 つのステップに分けることができます: 1. ServerSocket を作成します。 ServerSocket の構築方法は全部で 5 つあり、通常は ServerSocket (int port) が使用され、必要なのはポート番号 (port) のみです。2. 作成した ServerSocket の accept メソッドを呼び出してリッスンします。 accept メソッドはブロッキング メソッドです。つまり、accept メソッドを呼び出した後、プログラムは停止して接続要求を待ち、要求が受信されるまでプログラムは続行されません。リクエストを受信すると、accept メソッドは Socket を返します。
3. accept メソッドによって返された Socket を使用してクライアントと通信します。
チェスト
クライアント:
package IO; import java.io.*; import java.net.Socket; import java.util.Date; /** * Created by zhengbin06 on 2017/2/2. */ public class Client { public static void main(String[] args) { String msg = "Client Data"; try { Socket socket = new Socket("127.0.0.1", 9090); // 先写、再读 PrintWriter printWriter = new PrintWriter(socket.getOutputStream()); // 发送数据 printWriter.println(msg); printWriter.flush(); // 获得服务端返回的数据 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = bufferedReader.readLine(); System.out.println("received from server: " + line + "\ttime=" + new Date().getTime()); // 关闭资源 printWriter.close(); bufferedReader.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
サーバー:
package IO; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; /** * Created by zhengbin06 on 2017/2/2. */ public class Server { private static Socket socket = null; private static ServerSocket serverSocket = null; public static void main(String[] args) throws IOException { BufferedReader bufferedReader = null; PrintWriter printWriter = null; try { // 创建一个ServerSocket监听9090端口 serverSocket = new ServerSocket(9090); while (true) { System.out.println("开始等待请求。。。。"); // 等待请求 // 监听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 socket = serverSocket.accept(); System.out.println("接收到请求:" + socket.toString() + "\ttime=" + new Date().getTime()); // 接收到请求后使用socket进行通信, 创建BufferedReader用于读取数据 bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = bufferedReader.readLine(); System.out.println("received from client: " + line + "\ttime=" + new Date().getTime()); // 创建PrintWriter, 用于发送数据 printWriter = new PrintWriter(socket.getOutputStream()); printWriter.println("received data: " + line + "\ttime=" + new Date().getTime()); printWriter.flush(); } } finally { // 关闭所有资源 bufferedReader.close(); printWriter.close(); socket.close(); serverSocket.close(); } } }
新しいソケットリクエストが来ると、この接続の新しいソケット データ構造。ソケット データ情報には、正式なリクエストの送信元アドレスとポートが含まれます。この新しく作成されたデータ構造は、ServerSocket インスタンス内の未処理の接続データ構造のリストに関連付けられます。この時点では、サーバーの対応する Socket インスタンスは作成されていないため、クライアントとの 3 ウェイ ハンドシェイクが完了するまでサーバーの Socket インスタンスは返されず、Socket インスタンスに対応するデータ構造も作成されないことに注意してください。リスト内の移動はリスト内で実行されます。
データ送信:
接続が正常に確立されると、サーバーとクライアントの両方が Socket インスタンスを持ち、各 Socket インスタンスには InputStream と OutputStream があり、これら 2 つのオブジェクトを通じてデータが交換されます。
ネットワーク I/O はバイト ストリームとして送信されることを知っておく必要があります。Socket オブジェクトを作成するとき、オペレーティング システムは、データの書き込みと読み取りにそれぞれ特定のサイズのバッファー領域を割り当てます。完成しました。書き込み側は、OutputStreamに対応するSendQキューにデータを書き込み、この時点でRecvQが満杯であれば、データは相手側のInputStreamのRecvQキューに転送されます。の OutputStream は、RecvQ キューに SendQ によって送信されたデータを収容するのに十分なスペースが確保されるまでブロックされます。プロセスを以下の図に示します。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
