Maison  >  Article  >  Java  >  Explication détaillée de la prise de programmation réseau

Explication détaillée de la prise de programmation réseau

Y2J
Y2Joriginal
2017-05-08 14:04:481334parcourir

Cet article présente principalement les méthodes de classe et les exemples de programmation réseau Java. Les amis qui en ont besoin peuvent s'y référer

La programmation réseau fait référence à l'écriture de programmes qui s'exécutent sur plusieurs appareils (ordinateurs). via Internet.

L'API J2SE du package java.net contient des classes et des interfaces qui fournissent des détails de communication de bas niveau. Vous pouvez utiliser ces classes et interfaces directement pour vous concentrer sur la résolution de problèmes plutôt que sur les détails de la communication.

Le package java.net prend en charge deux protocoles réseau courants :

TCP : TCP est l'abréviation de Transmission Control Protocol. communication fiable entre deux applications. Couramment utilisé pour les protocoles Internet, appelés TCP/IP.

UDP : UDP est l'abréviation de User Datagram Protocol, un protocole sans connexion. Fournit des paquets de données à envoyer entre les applications.
Ce tutoriel explique principalement les deux sujets suivants.

Programmation de socket : Il s'agit du concept de réseau le plus largement utilisé et il a été expliqué en détail

Gestion des URL : Cette partie sera abordée dans un autre espace. Cliquez ici pour en savoir plus sur le traitement des URL en langage Java.

Programmation de sockets

Les sockets fournissent un mécanisme de communication entre deux ordinateurs utilisant TCP. Le programme client crée un socket et tente de se connecter au socket du serveur.

Lorsque la connexion est établie, le serveur créera un objet Socket. Le client et le serveur peuvent désormais communiquer en écrivant et en lisant dans l'objet Socket.

La classe java.net.Socket représente un socket, et la classe java.net.ServerSocket fournit un mécanisme permettant aux programmes serveur d'écouter les clients et d'établir des connexions avec eux.

Les étapes suivantes se produisent lors de l'établissement d'une connexion TCP à l'aide de sockets entre deux ordinateurs :

Le serveur instancie un objet ServerSocket, représentant un port sur la communication du serveur.

Le serveur appelle la méthode accept() de la classe ServerSocket, qui attendra que le client se connecte au port donné sur le serveur.

Pendant que le serveur attend, un client instancie un objet Socket et spécifie le nom du serveur et le numéro de port pour demander une connexion.

Le constructeur de la classe Socket tente de connecter le client au serveur et au numéro de port spécifiés. Si la communication est établie, un objet Socket est créé sur le client pour communiquer avec le serveur.

Côté serveur, la méthode accept() renvoie une nouvelle socket référence sur le serveur, qui est connecté au socket du client.

Une fois la connexion établie, la communication s'effectue à l'aide de flux d'E/S. Chaque socket possède un flux de sortie et un flux d’entrée. Le flux de sortie du client est connecté au flux d'entrée du serveur et le flux d'entrée du client est connecté au flux de sortie du serveur.

TCP est un protocole de communication bidirectionnel, de sorte que les données peuvent être envoyées via deux flux de données en même temps. Ce qui suit est un ensemble complet de méthodes utiles fournies par certaines classes pour implémenter des sockets.

Méthodes de la classe ServerSocket

L'application serveur obtient un port en utilisant la classe java.net.ServerSocket et écoute les demandes des clients.

La classe ServerSocket a quatre méthodes de constructeur :

序号 方法描述
1

 public ServerSocket(int port) throws IOException

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

2

 public ServerSocket(int port, int backlog) throws IOException

利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号

3

public ServerSocket(int port, int backlog, InetAddress address) throws IOException

使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器

4

public ServerSocket() throws IOException

创建非绑定服务器套接字

Numéro de série
Description de la méthode
1 public ServerSocket (port int) lève IOException Créer un socket serveur lié à un port spécifique
2 public ServerSocket (int port, int backlog) lève IOException Créez un socket serveur en utilisant le backlog spécifié et liez-le au numéro de port local spécifié
3 public ServerSocket (port int, backlog int, adresse InetAddress) lance IOExceptionCrée un serveur avec le port spécifié, le backlog d'écoute et l'adresse IP locale à laquelle se lier
4 public ServerSocket() lève IOExceptionCréer un socket serveur indépendant

Créez un socket de serveur indépendant. Si la méthode de construction ServerSocket ne lève pas d'exception , cela signifie que votre application s'est liée avec succès au port spécifié et écoute les demandes des clients.

Voici quelques méthodes courantes de la classe ServerSocket :

序号  方法描述
1

 public int getLocalPort()

返回此套接字在其上侦听的端口

2

public Socket accept() throws IOException

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

3

public void setSoTimeout(int timeout)

通过指定超时值启用/禁用 SO_TIMEOUT,以毫秒为单位

4

public void bind(SocketAddress host, int backlog)

将 ServerSocket 绑定到特定地址(IP 地址和端口号)

Numéro de série

Méthode description
1
public int getLocalPort()

Renvoie le port sur lequel ce socket écoute

2 public Socket accept() lance IOException

Écoutez et acceptez cette connexion de socket

3
public void setSoTimeout(int timeout)
序号  方法描述
1

public Socket(String host, int port) throws UnknownHostException, IOException.

创建一个流套接字并将其连接到指定主机上的指定端口号

2

public Socket(InetAddress host, int port) throws IOException

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

3

public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException.

创建一个套接字并将其连接到指定远程主机上的指定远程端口

4

public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException

创建一个套接字并将其连接到指定远程地址上的指定远程端口

5

public Socket()

通过系统默认类型的 SocketImpl 创建未连接套接字

Activer/désactiver en spécifiant la valeur du délai d'attente SO_TIMEOUT en millisecondes
4 public void bind (hôte SocketAddress, int backlog) Lier ServerSocket à une adresse spécifique (adresse IP et numéro de port)
Méthodes de la classe Socket Le java.net La classe .Socket représente le socket utilisé par les clients et les serveurs pour communiquer entre eux. Le client obtient un objet Socket via l'instanciation et le serveur obtient un objet Socket via la valeur de retour de la méthode accept(). La classe Socket dispose de cinq méthodes de construction.
Numéro de série Description de la méthode
1 public Socket (String host, int port) lance UnknownHostException, IOException. Crée un socket de flux et le connecte au numéro de port spécifié sur l'hôte spécifié
2 public Socket (hôte InetAddress, port int) lance IOExceptionCrée un socket de flux et le connecte au numéro de port spécifié de l'adresse IP spécifiée td>
3 public Socket (String host, int port, InetAddress localAddress, int localPort) renvoie IOException. >Crée un socket et le connecte au port distant spécifié sur l'hôte distant spécifié
4 public Socket (hôte InetAddress, port int, InetAddress localAddress, int localPort) lance IOExceptionCrée un socket et le connecte à l'adresse distante spécifiée
5 public Socket()passé Le type système par défaut de SocketImpl crée un prise non connectée

Lorsque le constructeur Socket revient, il n'instancie pas simplement un objet Socket, il essaiera en fait de se connecter au serveur et au port spécifiés.

Certaines méthodes intéressantes sont répertoriées ci-dessous. Notez que le client et le serveur ont tous deux un objet Socket, donc le client et le serveur peuvent appeler ces méthodes.

序号  方法描述
1

public void connect(SocketAddress host, int timeout) throws IOException

将此套接字连接到服务器,并指定一个超时值

2

 public InetAddress getInetAddress()

返回套接字连接的地址

3

 public int getPort()

返回此套接字连接到的远程端口

4

public int getLocalPort()

返回此套接字绑定到的本地端口

5

 public SocketAddress getRemoteSocketAddress()

 返回此套接字连接的端点的地址,如果未连接则返回 null

6

public InputStream getInputStream() throws IOException

返回此套接字的输入流

7

public OutputStream getOutputStream() throws IOException

返回此套接字的输出流

8

public void close() throws IOException

关闭此套接字

Numéro de série

Description de la méthode
1
public void connect (hôte SocketAddress, int timeout) lance IOException

Connectez ce socket au serveur et spécifiez une valeur de délai d'attente

2 public InetAddress getInetAddress()
序号 方法描述
1

static InetAddress getByAddress(byte[] addr)

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

2

static InetAddress getByAddress(String host, byte[] addr)

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

3

static InetAddress getByName(String host)

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

4

String getHostAddress()

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

5

String getHostName() 

获取此 IP 地址的主机名

6

static InetAddress getLocalHost()

返回本地主机

7

 String toString()

将此 IP 地址转换为 String

Renvoie l'adresse de la connexion socket
3 public int getPort()Retour à cet ensemble Le port distant auquel l'interface est connectée
4 public int getLocalPort() Renvoie le port local auquel ce socket est lié
5 public SocketAddress getRemoteSocketAddress() Renvoie l'adresse du point de terminaison connecté à ce socket, ou null s'il n'est pas connecté
6 public InputStream getInputStream() lance IOExceptionRenvoie le flux d'entrée de cette socket
7 public OutputStream getOutputStream() lance IOExceptionRenvoie le flux de sortie de ce socket
8 public void close() lance IOException Fermez ce socket
Méthodes de la classe InetAddressCette classe représente le protocole Internet (IP) adresse. Voici une liste des méthodes les plus utiles pour la programmation Socket : Numéro de série
Description de la méthode
1 static InetAddress getByAddress(byte[] addr)Étant donné l'adresse IP d'origine, renvoie Objet InetAddress
2 statique InetAddress getByAddress(String host, byte[] addr)Crée une InetAddress basée sur le nom d'hôte et l'adresse IP fournis
3 static InetAddress getByName(String host)Déterminez l'hôte en fonction de l'adresse IP du nom d'hôte
4 String getHostAddress( )Adresse IP de retourChaîne (exprimée sous forme de texte)
5 String getHostName() Obtenir le nom d'hôte de cette adresse IP
6 td>static InetAddress getLocalHost()Retour de l'hôte local
7 String toString()Convertir cette adresse IP en String

Instance client Socket

Le GreetingClient suivant est un programme client qui se connecte au serveur via socket et envoie une requête, puis attend une réponse.

// 文件名 GreetingClient.java
import java.net.*;
import java.io.*;
public class GreetingClient
{
 public static void main(String [] args)
 {
  String serverName = args[0];
  int port = Integer.parseInt(args[1]);
  try
  {
   System.out.println("Connecting to " + serverName
        + " on port " + port);
   Socket client = new Socket(serverName, port);
   System.out.println("Just connected to "
      + client.getRemoteSocketAddress());
   OutputStream outToServer = client.getOutputStream();
   DataOutputStream out =
      new DataOutputStream(outToServer);
 
   out.writeUTF("Hello from "
      + client.getLocalSocketAddress());
   InputStream inFromServer = client.getInputStream();
   DataInputStream in =
      new DataInputStream(inFromServer);
   System.out.println("Server says " + in.readUTF());
   client.close();
  }catch(IOException e)
  {
   e.printStackTrace();
  }
 }
}

Instance de serveur Socket

Le programme GreetingServer suivant est une application côté serveur qui utilise Socket pour écouter un port spécifié.

// 文件名 GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread
{
 private ServerSocket serverSocket;
 
 public GreetingServer(int port) throws IOException
 {
  serverSocket = new ServerSocket(port);
  serverSocket.setSoTimeout(10000);
 }
 public void run()
 {
  while(true)
  {
   try
   {
   System.out.println("Waiting for client on port " +
   serverSocket.getLocalPort() + "...");
   Socket server = serverSocket.accept();
   System.out.println("Just connected to "
     + server.getRemoteSocketAddress());
   DataInputStream in =
     new DataInputStream(server.getInputStream());
   System.out.println(in.readUTF());
   DataOutputStream out =
     new DataOutputStream(server.getOutputStream());
   out.writeUTF("Thank you for connecting to "
    + server.getLocalSocketAddress() + "\nGoodbye!");
   server.close();
   }catch(SocketTimeoutException s)
   {
   System.out.println("Socket timed out!");
   break;
   }catch(IOException e)
   {
   e.printStackTrace();
   break;
   }
  }
 }
 public static void main(String [] args)
 {
  int port = Integer.parseInt(args[0]);
  try
  {
   Thread t = new GreetingServer(port);
   t.start();
  }catch(IOException e)
  {
   e.printStackTrace();
  }
 }
}

Compilez le code Java ci-dessus et exécutez la commande suivante pour démarrer le service, en utilisant le numéro de port 6066 :

$ java GreetingServer 6066
Waiting for client on port 6066...

Ouvrez-le comme ci-dessous Client :

$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!

[Recommandations associées]

1.Tutoriel vidéo gratuit Java

2.Tutoriel vidéo sur l'implémentation de vignettes d'images dans des proportions égales en Java

3.Manuel de développement Java Alibaba

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