ホームページ  >  記事  >  Java  >  ソケットネットワークプログラミングの詳しい説明

ソケットネットワークプログラミングの詳しい説明

零下一度
零下一度オリジナル
2017-06-27 10:24:141294ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。