ソケットUDPプロトコルのJava--実現

UDPプロトコル(ユーザ・データグラム・プロトコル)

インターネットプロトコルスイートをサポートコネクションレスのトランスポートプロトコル、プロトコルと呼ばれるユーザデータグラムプロトコル(UDP、ユーザーデータグラムプロトコル)。UDPは、アプリケーションのためのカプセル化されたIPパケットなしで送信することができる接続を確立する方法を提供します。
インターネットは、主に2つのトランスポート層プロトコルを持って、お互いを補完します。接続なしで行うにはほとんど何も特別なアプリケーションにパケットを送信し、所望のレベルに独自のプロトコルアーキテクチャにそれらを可能にするために、その機能に加えて、UDP、ではありません。ほとんどすべてを行うためのプロトコルは、コネクション型のTCPです。

Java実装

送信者:送信
、受信端を:受信
正常に実際の生活の中で理解し、送信者に送りました。
しかし、このプログラムは、ちょうど反対である受信側を開始します
(ASが理解されるであろう、送信処理、受信機は、心配そうに手を取得するためのプロセスに送信側と送信を待つ、宅配便を購入することです)。

送信側は、以下のステップを実現します:

1. ソケットオブジェクトが必要 ----たDatagramSocketは(送信側と受信側がこの目的で使用されている)
UDPプロトコルは、接続を作成する必要はありませんが、ブリッジ(ソケット)を必要とする、DatagramSocketオブジェクトを要求され、このオブジェクトは、一番下にあることができますヘルプ私たちはパイプラインを構築するために、データが送信されます。私たちが直接Socketオブジェクトを作成できるようにJavaは、私たちに良いパッケージを支援してきましたので、基礎となる各異なるプロトコル実装は同じではありませんが、私たちが実現する基礎となる必要はありませんので、各プロトコルのニーズにSocketオブジェクトは、同じではありません。
2. データ伝送がラベル付きパケット必要 -DatagramPacket対象
オブジェクトがパケット作成される5つのパラメータを必要とします。

  1. 実際のデータ、バイト[]バイトを送信
  2. どこで終わりのこの配列0
  3. 送信バイト長の端部の長さ
  4. 終了アドレスをIP受信
  5. オープン受信側のポート番号

:(見つけ、デフォルトのIPアドレスは、ローカルホスト)である
ここに画像を挿入説明
。3. ソケットオブジェクトが送出され、


UDP送信側のコード:

package send;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class Send {
    public static void main(String[] args) {
        System.out.println("==send端==");
        try {
            //1.需要一个socket对象
            DatagramSocket socket = new DatagramSocket();
            //2.发送的数据需要打成一个包
            //packet对象创建时需要5个参数:
//            1. 发送的真实数据, byte[]
//            2. 从这个数组的哪里结束  0
//            3. 发送字节的长度  末尾  length
//            4. 接收端的ip地址
//            5.接收端开放的端口号
            Scanner input = new Scanner(System.in);
            System.out.println("跟接收端说点什么吧:");
            String message = input.nextLine();
            byte[] bMsg = message.getBytes();//将字符串转化成byte类型数组
            InetAddress ip = InetAddress.getByName("localhost");//将字符串转化为IP对象
            int port = 9999;//端口号
            DatagramPacket packet = new DatagramPacket(bMsg,0,bMsg.length,ip,port);
            //3.Socket对象发送出去
            socket.send(packet);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

受信側のステップを実現します:

1. ソケットオブジェクトの-DatagramSocketを作成する必要は
リスニングポートのデータが入って来かどうかを、受信側のポート番号を指定する必要があります。
2. 空のパケットを用意する必要が受信 -DatagramPacketオブジェクト
のヌルパケットが3つのパラメータを必要とします

  1. 空の配列
  2. その位置受信アレイの始まりを知らせます
  3. 長い配列を受け取ります

3. 受信データ
4 のデータを使用して表示、
有効バイト数に応じて、を構築しました。


サイドコードを受信UDP:

package receive;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Receive {
    public static void main(String[] args) {
        System.out.println("==receive==");
        try {
//            1.需要创建一个socket对象—DatagramSocket
            DatagramSocket socket = new DatagramSocket(9999);
            //2.需要准备一个空的数据包进行接收
            byte[] b = new byte[100];
            DatagramPacket packet = new DatagramPacket(b,0,b.length);
//        空数据包需要三个参数
            //        1.一个空的数组
            //        2.告知用数组的哪个位置开始接收
            //        3.用数组的多长进行接收
//           3.接收数据
            socket.receive(packet);//参数不是真正的参数含义,这个参数是为了接收数据,
            //这个参数的含义更像是返回值,把接受的数据放在参数里作为返回值.
//           4.展示、使用数据
            String value = new String(b,0,packet.getLength());//按照接收到的有效字节个数来构建
            System.out.println("接收到的数据:"+value);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

テスト

第一の端部の送信を開始、その後、受信側を開始します。
ここに画像を挿入説明

公開された46元の記事 ウォン称賛15 ビュー2617

おすすめ

転載: blog.csdn.net/qq_43598138/article/details/104407232