Heim > Java > javaLernprogramm > Hauptteil

Detaillierte Erläuterung der spezifischen Schritte der Netzwerkprogrammierung

零下一度
Freigeben: 2017-07-18 18:00:17
Original
1387 Leute haben es durchsucht

Drei Elemente der Netzwerkprogrammierung

    • Was ist eine IP-Adresse
    • InetAddress class_Diese Klasse stellt die Internet Protocol (IP)-Adresse dar
    • Ja Die eindeutige Kennung eines Computers im Internet.

    • Die InetAddress-Klasse hat keinen Konstruktor. Verwenden Sie die folgende Methode, um das InetAddress-Objekt abzurufen

    • IP-Adresse

static InetAddress[]

getAllByName(String host)

Gibt bei einem gegebenen Hostnamen ein Array seiner IP-Adresse basierend auf dem auf dem System konfigurierten Namensdienst zurück.

statische InetAddress

getByAddress(byte[] addr)

Gibt anhand der ursprünglichen IP-Adresse ein InetAddress-Objekt zurück.

statische InetAddress

getByAddress(String host, byte[] addr)

Erstellt eine InetAddress basierend auf dem angegebenen Hostnamen und der IP-Adresse.

statische InetAddress

getByName(String host)

Bestimmt die IP-Adresse eines Hosts mit einem Hostnamen.

  • getByName("Hostname (wiederholbar)/Zeichenfolge ip Adresse"): Verwenden Sie die IP-Adresszeichenfolge anderer Computer, um ein InetAddress-Objekt zu generieren 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()

              返回本地主机。

statische InetAddress

getLocalHost()

Kehren Sie zum lokalen Host zurück.

  • InetAddress的其它方法

String

getHostAddress()

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

 String

getHostName()

          获取此 IP 地址的主机名。

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

     String

  • getHostName

    ()

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

    • 协议

    • UDP协议的特点

    • UDP协议通讯涉及的类

    • 要发送的数据必须要封装成数据包才能够发送.

      每个数据包大小限制在64k中.

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

     

    DatagramSocket()

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

    构造方法类 DatagramSocket此类表示用来发送和接收数据报包的套接字UDP协议
      DatagramSocket()构造数据报套接字并将其绑定到本地主机上任何可用的端口.
    • 成员方法

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

     void

    close()

              关闭此数据报套接字。

    void

    send(DatagramPacket p)

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

       

    参数:

    p - 将要发送的 DatagramPacket。

     void

      schließen
    • ()

                关闭此数据报套接字

    void
    • senden(DatagramPacket p)

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

        

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

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

         

      参数:

      buf - 包数据。

      length - 包长度。

      address - 目的地址。

      port - 目的端口号。

         参数:p - 将要发送的 DatagramPacket.
      Tabelle>
      • UDP-Schritte_Starten Sie zuerst die Empfangsseite und dann die Sendeseite (im umgekehrten Fall kommt es zu Datenverlust)
        • Um einen UDP-Dienst einzurichten, müssen Sie auf eine Portnummer hören

          DatagramSocket socket = new DatagramSocket(9090);

        • Erstellen Sie einen leeren Container zum Empfangen von Daten

          byte[] buf = new byte[1024];

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

        • Verwenden Sie ein leeres Datenpaket, um Daten zu empfangen

          socket.receive(packet); //Diese Methode ist eine Blockierungsmethode. Empfangen Sie vom sendenden Ende übermittelte Daten. Wenn niemand eine Nachricht an ihn sendet, wird er ewig warten.

          System.out.println("Die empfangenen Daten sind: "+new String(buf) );

        • Schließen Sie die Ressource

          socket.close();

        • Richten Sie zunächst einen UDP-Protokolldienst ein

          DatagramSocket socket = new DatagramSocket();

        • Bereiten Sie die Daten vor und packen Sie sie dann in den Container

          String str = „Das ist mein erstes UDP-Beispiel“;

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

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

          //Parameter eins: der Inhalt der Daten, Parameter zwei: die Länge der Daten (Bytes), Parameter drei: IP-Adresse, Parameter vier: Port

        • UDP-Serviceklasse zum Senden verwenden

          socket.send(packet);

        • Schließen Sie die Ressource (die Funktion zum Schließen der Ressource: Geben Sie die Portnummer frei)

          socket.close( );

        • Sender_Steps:
        • Receiver_Steps:
      • TCP-Protokoll
        • Client_Class Socket

          Diese Klasse implementiert Client-Sockets (sie kann auch „Sockets“ genannt werden). Ein Socket ist der Endpunkt für die Kommunikation zwischen zwei Maschinen.

        • Konstruktionsmethode

        • Die gesendeten Daten werden basierend auf dem IO-Stream gesendet

        • Es gibt keine Größenbeschränkung für die gesendeten Daten

        • Verwendet einen Drei-Wege-Handshake-Mechanismus Gewährleistung der Datenintegrität

        • Aufgrund der Oberflächenverbindung ist die Geschwindigkeit langsam

        • TCP Protokoll ist

        • Eigenschaften des TCP-Protokolls für Client und Server
        • Beteiligte Klassen
         DatagramPacket (byte[] buf, int length, InetAddress adresse, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。    参数:buf - 包数据.length - 包长度.Adresse – 目的地址。Hafen – 目的端口号。

       

      Socket(InetAddress address, int port)

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

         

      参数:

      address - IP 地址。

      port - 端口号。

         

      • 成员方法

       InputStream

      getInputStream()

                返回此套接字的输入流。

      OutputStream

      getOutputStream()

                返回此套接字的输出流。

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

      OutputStream

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

        Diese Klasse implementiert Server-Sockets. Der Server-Socket wartet auf Anfragen, die über das Netzwerk eingehen. Es führt eine Aktion basierend auf der Anfrage durch und gibt die Ergebnisse dann möglicherweise an den Anforderer zurück.

        • Konstruktormethode

       

      ServerSocket(int port)

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

      参数:

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

      • ServerSocket

        (int port)

      Erstellen Sie einen Server-Socket, der an einen bestimmten Port gebunden ist.

       Socket

      accept()

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

      问题:

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

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

      Parameter: Port – Portnummer oder 0, Zeigt an um einen beliebigen freien Port zu nutzen.
      Member-Methode

      Socket

      akzeptieren() Lauscht auf Verbindungen zu diesem Socket und akzeptiert diese. Frage:Warum ist ServerSocket nicht so eingestellt, dass es den Stream erhält? (getOutputStream) Was ist die entsprechende Methode?

      Da der Server mit mehreren Clients verbunden ist, wird zur Vermeidung von Verwechslungen mit jedem ein Socket eingerichtet client. Operationen getOutputStream- und getInputStream-Operationen

      • TCP-Schritte_Starten Sie zuerst den Server, dann den Client (im umgekehrten Fall kommt es zu Datenverlust)
        • Einen TCP-Protokollserver einrichten und einen Port abhören müssen

          ServerSocket serverSocket = new ServerSocket(9090);

        • Anfrageverbindung des Clients akzeptieren

          Socket socket = serverSocket.accept(); //Diese Methode ist eine blockierende Methode. Wenn nein Wenn der Client eine Verbindung herstellt, wird er ewig warten.

        • Rufen Sie den Eingabestream ab und lesen Sie die vom Client übertragenen Daten

          InputStream inputStream = socket.getInputStream() ;

          byte[] buf = neues Byte[1024];

          int length = 0;

          length = inputStream.read(buf);

          System.out.println("Vom Server empfangene Daten: "+ neuer String (buf,0,length));

        • Eine Nachricht an den Client senden_Der Server schreibt Daten an den Client

          //Eine Nachricht an den Client senden und der Server schreibt Daten an den Client

          OutputStream out = socket.getOutputStream(); //Ausgabestream abrufen object

          out.write("Client, ich habe es erhalten!".getBytes());

          Serverressourcen schließen

          serverSocket.close();

        • TCP-Protokolldienst einrichten

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

        • Nachricht an server_client senden schreibt Daten auf den Server

          OutputStream out = socket.getOutputStream();

          out.write("Das ist mein erstes TCP-Beispiel!" .getBytes());

        • Rufen Sie den Eingabestream ab und lesen Sie die vom Server übertragenen Daten

          InputStream inputStream = socket. getInputStream();

          byte[] buf = new byte[1024];

          int length = inputStream.read(buf);

          System.out.println("Vom Client empfangene Daten: "+ new String(buf,0,length));

        • Client-Ressourcen schließen

          socket.close();

        • Client_Step:
        • Server_Step:

      Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der spezifischen Schritte der Netzwerkprogrammierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

      Verwandte Etiketten:
      Quelle:php.cn
      Vorheriger Artikel:Erläuterung der Verwendung von MyBatis openSession(), close() und commit() Nächster Artikel:Beispielcode für den Spring-Nachrichtenkonverter
      Erklärung dieser Website
      Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
      Neueste Artikel des Autors
      Aktuelle Ausgaben
      verwandte Themen
      Mehr>
      Beliebte Empfehlungen
      Beliebte Tutorials
      Mehr>
      Neueste Downloads
      Mehr>
      Web-Effekte
      Quellcode der Website
      Website-Materialien
      Frontend-Vorlage
      Über uns Haftungsausschluss Sitemap
      Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!