Maison >Java >javaDidacticiel >Explication détaillée des étapes spécifiques de la programmation réseau

Explication détaillée des étapes spécifiques de la programmation réseau

零下一度
零下一度original
2017-07-18 18:00:171430parcourir

Trois éléments de la programmation réseau

    • Qu'est-ce qu'une adresse IP
    • Classe InetAddress_Cette classe représente l'adresse IP (Internet Protocol)
    • Oui L'identifiant unique d'un ordinateur sur Internet.

    • La classe InetAddress n'a pas de constructeur, utilisez la méthode suivante pour obtenir l'objet InetAddress

    • Adresse IP

static InetAddress[]

getAllByName(Hôte de chaîne)

Étant donné un nom d'hôte, renvoie un tableau de son adresse IP en fonction du service de noms configuré sur le système.

Adresse Inet statique

getByAddress(adresse octet[])

Étant donné l'adresse IP d'origine, renvoie un objet InetAddress.

Adresse Inet statique

getByAddress(chaîne hôte, octet[] addr)

Crée une InetAddress basée sur le nom d'hôte et l'adresse IP fournis.

Adresse Inet statique

getByName(Hôte de chaîne)

Détermine l'adresse IP d'un hôte à partir d'un nom d'hôte.

  • getByName("Nom d'hôte (répétable)/IP de chaîne de caractères adresse") : utilisez la chaîne d'adresse IP d'autres machines pour générer un objet InetAddress span>

    static InetAddress[]

    getAllByName(String host)

              在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。

    static InetAddress

    getByAddress(byte[] addr)

              在给定原始 IP 地址的情况下,返回 InetAddress 对象。

    static InetAddress

    getByAddress(String host, byte[] addr)

              根据提供的主机名和 IP 地址创建 InetAddress。

    static InetAddress

    getByName(String host)

              在给定主机名的情况下确定主机的 IP 地址。

    • getByName("主机名(可重复)/字符字符串的ip地址"):使用其他机器的ip地址字符串生成一个InetAddress对象

    static InetAddress

    getLocalHost()

              返回本地主机。

Adresse Inet statique

getLocalHost()

Retour à l'hôte local.

  • InetAddress的其它方法

String

getHostAddress()

          返回 IP 地址字符串(以文本表现形式)。

 String

getHostName()

          获取此 IP 地址的主机名。

Chaîne
  • getHostAddress()
  •           返回 IP 地址字符串(以文本表现形式)。

     String

               获取此 IP 地址的主机名。
  • 端口号
    • 端口号的范围:0~65535
    • 0~1023这个范围的端口已经被系统使用
    • 协议

    • UDP协议的特点
    • UDP协议通讯涉及的类
    • 要发送的数据必须要封装成数据包才能够发送.
    • 每个数据包大小限制在64k中.

    • 因为面向无连接,所以速度快.
    • UDP协议不分客户端和服务端,只分发送端和接受端.

     

    DatagramSocket()

    构造数据报套接字并将其绑定到本地主机上任何可用的端口。

    构造方法类 DatagramSocket此类表示用来发送和接收数据报包的套接字UDP协议
      DatagramSocket()构造数据报套接字
    • 成员方法

    tableau>   类 DatagramPacket此类表示数据报包 构造方法

     void

    close()

              关闭此数据报套接字。

    void

    send(DatagramPacket p)

              从此套接字发送数据报包。

       

    参数:

    p - 将要发送的 DatagramPacket。

     void

      fermer
    • ()

                关闭此数据报套接字。

    void
    • envoyer(DatagramPacket p)

    •           从此套接字发送数据报包。

        

      DatagramPacket(byte[] buf, int length, InetAddress address, int port)

      构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

         

      参数:

      buf - 包数据。

      length - 包长度。

      address - 目的地址。

      port - 目的端口号。

         参数:p - 将要发送的 DatagramPacket。
      tableau>
      • Étapes UDP_Démarrez d'abord l'extrémité de réception, puis démarrez l'extrémité d'envoi (une perte de données se produira si l'inverse se produit)
        • Pour établir un service UDP, vous devez écouter un numéro de port

          DatagramSocket socket = new DatagramSocket(9090);

        • Créer un conteneur vide pour recevoir des données

          byte[] buf = new byte[1024];

          DatagramPacket packet = new DatagramPacket(buf, buf.length);

        • Utiliser un paquet de données vide pour recevoir des données

          socket.receive(packet); //Cette méthode est une méthode de blocage. Recevoir les données transmises par l'expéditeur. Si personne ne lui envoie de message, il attendra éternellement.

          System.out.println("Les données reçues sont : "+new String(buf) );

        • Fermez la ressource

          socket.close();

        • Établissez d'abord un service de protocole UDP

          DatagramSocket socket = new DatagramSocket();

        • Préparez les données, puis emballez les données dans le conteneur

          String str = "Ceci est mon premier exemple udp";

          byte[] buf = str.getBytes(); 🎜>

          Paquet DatagramPacket = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),9090);

          //Paramètre un : le contenu des données, paramètre deux : la longueur des données (octets), paramètre trois : adresse IP, paramètre quatre : port

        • Utiliser la classe de service UDP pour envoyer

          socket.send(packet);

        • Fermer la ressource (la fonction de fermeture de la ressource : libérer le numéro de port)

          socket.close( );

        • Sender_Steps :
        • Receiver_Steps :
      • Protocole TCP
        • Client_Class Socket

          Cette classe implémente les sockets clients (elle peut aussi être appelée « sockets »). Un socket est le point final de la communication entre deux machines.

        • Méthode de construction

        • Les données envoyées sont envoyées en fonction du flux IO

        • Il n'y a aucune limite de taille pour les données envoyées

        • Utilise un mécanisme de négociation à trois voies pour assurer l'intégrité des données

        • En raison de la connexion de surface, la vitesse est lente

        • TCP le protocole est

        • Caractéristiques du protocole TCP pour le client et le serveur
        • Classes impliquées
         DatagramPacket (byte[] buf, int length, InetAddress adresse, int port) 构造数据报包,用来将长度为 longueur 的包发送到指定主机上的指定端口号。    参数:buf - 包数据。longueur - 包长度。adresse - 目的地址。port - 目的端口号。

       

      Socket(InetAddress address, int port)

                创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

         

      参数:

      address - IP 地址。

      port - 端口号。

         

      • 成员方法

       InputStream

      getInputStream()

                返回此套接字的输入流。

      OutputStream

      getOutputStream()

                返回此套接字的输出流。

       InputStream
      getInputStream()           返回此套接字的输入流。

      OutputStream

      getOutputStream()           返回此套接字的输出流。
      • Server_class ServerSocket

        Cette classe implémente les sockets serveur. Le socket du serveur attend que les requêtes arrivent sur le réseau. Il effectue certaines actions en fonction de la demande et peut ensuite renvoyer les résultats au demandeur.

        • Méthode constructeur

       

      ServerSocket(int port)

                创建绑定到特定端口的服务器套接字。

      参数:

      port - 端口号;或者为 0,表示使用任何空闲端口。

      • ServerSocket

        (port int)

      Créez un socket serveur lié à un port spécifique.

       Socket

      accept()

                侦听并接受到此套接字的连接。

      问题:

      为什么ServerSocket没有设置获取流(getOutputStream)对应的方法了?

      因为服务端跟多个客户端连接,为了防止搞乱,通过与每个客户端建立socket来操作getOutputStream和getInputStream操作

      Paramètres : port - numéro de port ou 0, indique pour utiliser n'importe quel port libre.
      Méthode membre

      Socket

      accepter() Écoute et accepte les connexions à cette prise. Question :Pourquoi ServerSocket n'est-il pas configuré pour obtenir le flux (getOutputStream) Quelle est la méthode correspondante ?

      Le serveur étant connecté à plusieurs clients, afin d'éviter toute confusion, un socket est établi avec chacun client. Opérations getOutputStream et getInputStream

      • Étapes TCP_Démarrez d'abord le serveur, puis le client (une perte de données se produira si l'inverse se produit)
        • Établir un serveur de protocole TCP et devoir écouter sur un port

          ServerSocket serverSocket = new ServerSocket(9090);

        • Accepter la connexion demandée par le client

          Socket socket = serverSocket.accept(); //Cette méthode est une méthode de blocage. le client s'y connecte, il attendra éternellement.

        • Récupérer le flux d'entrée et lire les données transmises par le client

          InputStream inputStream = socket.getInputStream() ;

          octet[] buf = nouvel octet[1024];

          int longueur = 0;

          length = inputStream.read(buf);

          System.out.println("Données reçues par le serveur : "+ nouvelle chaîne (buf,0,length));

        • Envoyer un message au client_Le serveur écrit des données au client

          //Envoyer un message au client et le serveur écrit les données sur le client

          OutputStream out = socket.getOutputStream( //Obtenir le flux de sortie object

          out.write("Client, je l'ai reçu!".getBytes());

          Fermer les ressources du serveur

          serverSocket.close();

        • Établir le service de protocole TCP

          Socket socket = new Socket(InetAddress.getLocalHost(), 9090);

        • Envoyer un message au serveur_client écrit des données sur le serveur

          OutputStream out = socket.getOutputStream();

          out.write("Ceci est mon premier exemple TCP!" .getBytes());

        • Récupérer le flux d'entrée et lire les données transmises par le serveur

          InputStream inputStream = socket. getInputStream();

          byte[] buf = new byte[1024];

          int length = inputStream.read(buf);

          System.out.println("Données reçues par le client : "+ new String(buf,0,length));

        • Fermer les ressources client

          socket.close();

        • Client_Step :
        • Server_Step :

      Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

      Déclaration:
      Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
      Article précédent:Explication de l'utilisation de MyBatis openSession(), close() et commit()Article suivant:Explication de l'utilisation de MyBatis openSession(), close() et commit()

      Articles Liés

      Voir plus