1. Présentation
La classe Socket est la classe de base pour Java pour effectuer des opérations TCP client. Cette classe elle-même utilise du code pour communiquer via la pile TCP locale du système d'exploitation hôte. Les méthodes de classe de socket établiront et détruiront des connexions et définiront diverses options de socket.
La classe SERVERSOCKET est la classe de base pour Java pour effectuer des opérations côté serveur. Cette classe s'exécute sur le serveur et écoute les connexions TCP entrantes. Chaque serveur de socket écoute un port du serveur. Lorsque le client de l'hôte distant essaie de se connecter à ce port, le serveur est réveillé et renvoie un objet de prise normal représentant la prise entre les deux hôtes.
2. Qu'est-ce que TCP?
TCP est un protocole de communication de la couche de transport basé sur le flux orienté connexion, fiable et d'octets. La communication TCP est divisée en client et serveur, et les objets correspondants sont respectivement Socket et Serversocket.
Lorsqu'un ordinateur doit se connecter à un autre ordinateur distant, le protocole TCP leur permet d'établir une connexion: un lien virtuel pour envoyer et recevoir des données. Le protocole TCP est responsable de la collecte de paquets d'informations et de leur envoi dans un ordre approprié, puis de les resserrer correctement après les avoir révisés à l'extrémité de réception. Afin de s'assurer que le paquet de données est précis pendant la transmission, TCP utilise un mécanisme de retransmission: lorsqu'une entité de communication envoie un message à une autre entité de communication, elle doit recevoir les informations de confirmation d'une autre entité. Si aucune information de confirmation n'est reçue, les informations envoyées tout à l'heure seront à nouveau ressenties.
Iii. Communication TCP
1. Constructeur
La classe de socket implémente les sockets clients et le constructeur peut spécifier l'hôte et le port auquel vous souhaitez vous connecter. L'hôte peut être spécifié en tant qu'InetAddress ou String, et le port est toujours spécifié comme une valeur int entre 0 et 65535.
Socket s = new socket ("127.0.0.1", 10001); // Créez une prise de flux et connectez-la au numéro de port spécifié sur l'hôte spécifiéLa classe SERVERSOCKET implémente les sockets du serveur. Le socket serveur attend que la demande soit transmise via le réseau, il effectue certaines opérations en fonction de la demande, puis renvoie le résultat au demandeur.
SERVERSOCKET SS = NOUVEAU SERVERSOCKET (10001); // Créez une prise de serveur liée à un port spécifique
2. Exemple: Copie de fichiers TCP
Client:
classe publique ClientDemo {public static void Main (String [] args) lève un inconnu HostException, ioException {socket s = new socket ("127.0.0.1", 10004); buttereDeader Buf = new BufferederAder (New FileReader ("c: //users//administrator//Desktop/1.txt"); line = null; / * printwriter out = new printwriter (s.getOutputStream (), true); while ((line = buf.readline ())! = null) {out.println (line); } * / BufferedWriter out = new BufferedWriter (new OutputStreamWriter (s.getOutputStream ())); while ((line = buf.readline ()))! = null) {out.write (line); out.newline (); out.flush ();} s.shutdownoutput (); bufferedReader dans = new BufferedReader (new inputStreamReader (s.GetInputStream ()); String str = in.readline (); system.out.println (str); s.close (); buf.close ();}}Côté serveur:
classe publique ServerDemo {public static void main (String [] args) lève ioException {serversocket ss = new serversocket (10004); socket s = ss.accept (); bufferedReader dans = new BuffereDader (new inputStreamReader (s.getInputStream ()); String Line = Null; / * printwriter buf = news FileWriter ("c: //users//administrator//desktop//2.txt"), true); while ((line = in.readline ())! = null) {buf.println (line); } * / BufferedWriter buf = new BufferedWriter (new FileWriter ("c: //users//administrator//desktop//2.txt")); while ((line = in.readline ())! = Null) {buf.write (line); buf.newline (); buf.flush ();} printwriter out outfre Printwriter (s.getOutputStream (), true); out.println ("Transfer réussi!"); Ss.close (); buf.close ();}}4. Application de Socket sur la navigation
Nous pouvons écrire le côté serveur dans Eclipse, puis y accéder à l'aide du navigateur.
Par exemple, le code côté serveur est:
Classe publique SockeTServer {public static void main (String [] args) lève ioException {Serversocket Server = new serversocket (11000); Socket client = server.accept (); Printwriter out = new printwriter (client.getOutputStream (), true); out.println ("Hello!"); server.close (); }}Ensuite, ouvrez le navigateur IE, entrez http://192.168.1.120:11000/ dans l'adresse (192.168.1.120 est l'adresse IP locale), et le résultat est
Dans les applications normales, le navigateur émet une demande au serveur Tomacat pour obtenir des ressources telles que les images de la page Web. Tomca est un logiciel côté serveur écrit en Java.
Maintenant, nous écrivons le côté serveur comme:
Classe publique SockeTServer {public static void main (String [] args) lève ioException {Serversocket Server = new Serversocket (11000); Socket client = server.accept (); Printwriter out = new printwriter (client.getOutputStream (), true); BufferedReader dans = new BufferedReader (new InputStreamReader (client.getInputStream ())); Chaîne line = null; while ((line = in.readline ())! = null) System.out.println (ligne); out.println ("Hello!"); server.close (); }}Ensuite, lorsque vous accédez au navigateur, vous pouvez voir que les données d'en-tête de demande envoyées par le navigateur (client) au serveur sont:
En utilisant les principes ci-dessus, nous pouvons écrire un logiciel côté navigateur (client) similaire à IE par nous-mêmes. Ajoutez d'abord une ressource démo.html au répertoire d'installation de Tomcat c: /apache-tomcat-7.0.62/webapps/myweb, puis écrivez le client, le code est le suivant:
classe publique ClientDemo {public static void Main (String [] args) lève une inconnue, ioException {socket s = new socket ("192.168.1.120", 8080); printwriter out = new Printwriter (s.getOutputStream (), true); // Envoyez la demande au serveur. Http / 1.1 "); out.println (" accepter: * / * "); out.println (" hôte: 192.168.1.120:11000") ;out.println("Connection: Keep-Alive "); // InputStreamReader (s.getInputStream ())); string line = null; // renvoie le fichier de réponse du serveur while ((line = in.readline ())! = Null) {System.out.println (line);} s.close ();}}Ensuite, commencez Tomcat. Autrement dit, double-cliquez sur le fichier startup.bat dans c: /apache-tomcat-7.0.62/bin. Ensuite, exécutez le code client ci-dessus, et vous pouvez voir les données de réponse renvoyées par Tomacat:
Résumer
Ce qui précède est l'exemple de code complet de la communication TCP dans cet article sur la programmation du réseau Java, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
Les bases de la programmation Java Network: communication à sens unique
Exemple de code pour implémenter la communication de socket dans la programmation multithread Java
Explication détaillée du modèle de consommateur du code de la communication de threads et du mécanisme de réveil en attente de Java multithread
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!