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 :
|
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 :
|
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)
|
||||||||||||
4 | public void bind (hôte SocketAddress, int backlog) Lier ServerSocket à une adresse spécifique (adresse IP et numéro de port) |
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.
|
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()
|
||||||||||||||||||
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 |
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]
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!