java.net.InetAddress クラス: このクラスは、インターネット プロトコル (IP) アドレスを表します。
静的メソッド:
static InetAddress getLocalHost() は、ローカル ホスト (自分のコンピューター) を返します。
static InetAddress getByName(String host) ホスト名を指定して、ホストの IP アドレスを決定します。
非静的メソッド:
String getHostAddress() は、IP アドレス文字列 (テキスト表現) を返します。
String getHostName() この IP アドレスのホスト名を取得します。
UDP 通信の受信側: 送信側が送信したデータグラム パケットを受信して解凍します
* UDP に関連するクラス:
* java.net.DatagramPacket: このクラスはデータグラム パッケージを表します。
* 機能: データグラム パケットを使用して送信者からデータを受信します。
* java.net.DatagramSocket: このクラスは、データグラム パケットの送受信に使用されるソケットを表します。
* 機能: データグラムパケットの送信、データグラムパケットの受信
* ソケット: IP アドレスとポート番号をバインディングするネットワークオブジェクト
*
* 構築方法:
* DatagramPacket(byte[] buf, int length)
* データを受信するための DatagramPacket を構築長さ length のパケット。
* DatagramSocket(int port)
* データグラム ソケットを作成し、ローカル ホスト上の指定されたポートにバインドします。
*
* メンバーメソッド:
* void accept(DatagramPacket p) このソケットからデータグラムパケットを受信します。
*
* 実装手順:
* 1. DatagramPacket オブジェクトを作成し、送信者からデータグラムを受信します
* 2. DatagramSocket オブジェクトを作成し、システムによって指定されるポート番号と一致させます
* 3. DatagramSocket のメソッドを使用します送信者からデータを受信する Packet
* 4. アンパッキング
* DatagramPacket にはデータグラム パケットに関連するメソッドがあります
* int getLength() 送信者のデータの長さを取得します
* InetAddress getAddress() 送信者の IP アドレス オブジェクトを取得します
* int getPort() 送信元のポート番号(システムによりランダムに割り当てられる)を取得します
* 5. リソースを解放します
1 public static void main(String[] args) throws IOException { 2 //1.创建DatagramPacket对象,接收发送端的数据报 3 byte[] bytes = new byte[1024];//数据最大传输64kb 1024*64 4 DatagramPacket dp = new DatagramPacket(bytes, bytes.length); 5 //2.创建DatagramSocket对象,并且和系统要指定的端口号 6 DatagramSocket ds = new DatagramSocket(8888); 7 //3.使用DatagramSocket中的方法receive发送端接收数据报包 8 ds.receive(dp); 9 //4.拆包10 //int getLength() 获取发送端数据的长度11 int length = dp.getLength();12 //InetAddress getAddress() 获取发送端的IP地址对象13 String ip = dp.getAddress().getHostAddress();14 //int getPort() 获取发送端的端口号(系统随机分配的)15 int port = dp.getPort();16 17 System.out.println(new String(bytes,0,length)+"ip:"+ip+",端口号"+port);18 //5.释放资源19 ds.close();20 }
UDP通信の送信元: IPアドレスとデータグラムに従ってデータをパックしてデータグラムパケットを送信します受信者のポート
*
* udp クラスに関連:
* java.net.DatagramPacket: このクラスはデータグラム パケットを表します。
* 機能: 受信側の IP アドレスとポート番号を使用してデータをパックします
* java.net.DatagramSocket: このクラスは、データグラム パッケージの送受信に使用されるソケットを表します。
* 機能: データグラムパケットの送信、データグラムパケットの受信
* ソケット: IP アドレスとポート番号をバインディングするネットワークオブジェクト
*
* 構築メソッド:
* DatagramPacket(byte[] buf, int length, InetAddress address , int port)
* * 指定されたホスト上の指定されたポート番号に長さ length のパケットを送信するデータグラム パケットを構築します。
* DatagramSocket()
* データグラム ソケットを構築し、それをローカル ホスト上の使用可能なポートにバインドします。
*
* メンバーメソッド:
* void send(DatagramPacket p) このソケットからデータグラムパケットを送信します。
*
* 実装手順:
* 1. DatagramPacket オブジェクトを作成し、データと受信側の IP アドレスとポート番号をカプセル化します (コンテナーを作成します)
* 2. DatagramSocket オブジェクトを作成します (ドックを作成します)
* 3. DatagramSocket の send メソッドを使用してデータグラム パケットを送信します
* 4. リソースを解放します
*
* UDP 通信はコネクションレス型のため、受信側の有無に関係なくデータを送信できます。受信側が存在しない場合、データが失われます。
1 public static void main(String[] args) throws IOException { 2 //1.创建DatagramPacket对象,封装数据和接收端的IP地址,端口号(创建集装箱) 3 byte[] bytes = "你好UDP!".getBytes(); 4 InetAddress address = InetAddress.getByName("127.0.0.1"); 5 DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, 8888); 6 //2.创建DatagramSocket对象(创建码头) 7 DatagramSocket ds = new DatagramSocket(); 8 //3.使用DatagramSocket中的方法send发送数据报包 9 ds.send(dp);10 //4.释放资源11 ds.close();12 }
TCP 通信クライアント : サーバーにリクエスト接続を送信し、サーバーによって書き戻されたデータを受信します
*
* クライアントのクラスを表します:
* java.net.Socket: このクラスはクライアント ソケットを実装します ( 「ソケット」とも呼ばれます)。
*
* コンストラクター:
* Socket(InetAddress address, int port) ストリームソケットを作成し、指定された IP アドレスの指定されたポート番号に接続します。
* Socket(String host, int port) ストリーム ソケットを作成し、指定されたホストの指定されたポート番号に接続します。
*
* メンバー メソッド:
* OutputStream getOutputStream() このソケットの出力ストリームを返します。
* InputStream getInputStream() このソケットの入力ストリームを返します。
*
* 注: クライアントとサーバー間のデータ対話には、自分で作成したストリーム オブジェクトを使用することはできません。 Socket で提供されるストリームを使用する必要があります。
*
* 実装手順:
* 1. クライアントの Socket オブジェクトを作成します。サーバーの IP アドレスとポート番号をバインドします
* 2. Socket のメソッド getOutputStream を使用して、ネットワーク出力ストリームを取得します
* 3. OutputStream ネットワーク ストリームにメソッド write を使用して、サーバーにデータを送信します
* 4. Socket の getInputStream メソッドを使用してネットワーク入力ストリームを取得します
* 5. InputStream ネットワーク ストリームで読み取られたメソッドを使用して、サーバーによって書き戻されたデータを読み取ります
* 6. リソースを解放します
*
* 注: TCP はコネクション指向の通信です、サーバーが起動していない場合は、最初にサーバーを起動してからクライアントを起動する必要があります
* ConnectException: 接続が拒否されました: connect
1 public static void main(String[] args) throws IOException { 2 //1.创建客户端Socket对象,绑定服务器的IP地址和端口号 3 Socket socket = new Socket("127.0.0.1", 9999); 4 //2.使用Socket中的方法getOutputStream获取网络输出流 5 OutputStream os = socket.getOutputStream(); 6 //3.使用OutputStream网络流中的方法write给服务器发送数据 7 os.write("你好服务器".getBytes()); 8 //4.使用Socket中的方法getInputStream获取网络输入流 9 InputStream is = socket.getInputStream();10 //5.使用InputStream网络流中的方法read读取服务器回写的数据11 byte[] bytes = new byte[1024];12 int len = is.read(bytes);13 System.out.println(new String(bytes,0,len));14 //6.释放资源15 socket.close();16 }
TCP通信的服务器端:接收客户端的发送的数据,给客户端回写数据
*
* 表示服务器的类:
* java.net.ServerSocket:此类实现服务器套接字。
*
* 构造方法:
* ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
*
* 有一件特别重要的事:服务器必须的知道是哪个客户端请求的服务器
* 所有可以使用accept方法获取请求的客户端
* 成员方法:
* Socket accept() 侦听并接受到此套接字的连接。
*
* 实现步骤:
* 1.创建ServerSocket对象,和系统要指定的端口号
* 2.使用ServerSocket中的方法accept获取请求的客户端对象
* 3.使用Socket中的方法getInputStream获取网络输入流
* 4.使用InputStream网络流中的方法read读取客户端发送的数据
* 5.使用Socket中的方法getOutputStream获取网络输出流
* 6.使用OutputStream网络流中的方法write给客户端回写数据
* 7.释放资源(ServerSocket,Socket)
1 public static void main(String[] args) throws IOException { 2 //1.创建ServerSocket对象,和系统要指定的端口号 3 ServerSocket server = new ServerSocket(9999); 4 //2.使用ServerSocket中的方法accept获取请求的客户端对象 5 Socket socket = server.accept(); 6 //3.使用Socket中的方法getInputStream获取网络输入流 7 InputStream is = socket.getInputStream(); 8 byte[] bytes = new byte[1024]; 9 //4.使用InputStream网络流中的方法read读取客户端发送的数据10 int len = is.read(bytes);11 System.out.println(new String(bytes,0,len));12 //5.使用Socket中的方法getOutputStream获取网络输出流13 OutputStream os = socket.getOutputStream();14 //6.使用OutputStream网络流中的方法write给客户端回写数据15 os.write("收到".getBytes());16 //7.释放资源(ServerSocket,Socket)17 socket.close();18 server.close();19 }
以上がソケットネットワークプログラミングの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。