Cet article explique le code détaillé de la programmation Java Socket pour implémenter un simple service de salutation pour votre référence. Le contenu spécifique est le suivant
Côté serveur:
Implémentation du service HELLO le plus simple, imprimez l'adresse IP du client à la console, envoyez une chaîne de caractères (bonjour, socket java) à tout client connecté et fermez la connexion avec le client. Attendez l'arrivée de la demande de connexion du client suivant.
Client:
Implémentez une prise la plus simple pour se connecter au serveur Hello, accepte les données d'octets envoyées par le serveur et imprime le contenu à la console.
Conseils clés:
Parce que Java fournit beaucoup d'API des flux d'entrée et de sortie, de nombreux débutants sont exposés à la programmation Java Socket, et parce qu'ils manquent de compréhension de la nature de la communication des octets du réseau, ils acceptent directement les flux d'octets de socket par ReadLine (). Cependant, parce que la partie envoyée n'envoie pas / r / n, les données ne peuvent pas être lues. C'est l'erreur la plus courante. Certaines autres erreurs courantes incluent la non-initialisation du tampon d'acceptation, ce qui entraîne des caractères brouillés et non réassemblés en fonction du nombre d'octets reçus par la lecture, entraînant une exception aux données reçues. Le code démontre donc ce qui est envoyé par octet et acceptation par BYTE. Il s'agit d'un concept et d'un principe très importants dans la programmation réseau. Laissez la méthode de Stream Input Stream Println () et le flux de sortie ReadLine () aller dans l'enfer. Ce n'est pas que ce n'est pas facile à utiliser, mais je vous suggère de ne pas l'utiliser car ceux-ci entraveront votre compréhension et votre compréhension de l'essence de la programmation réseau. De plus, je voudrais faire une note spéciale: parfois Flush () n'est nécessaire que si vous utilisez un flux d'entrée et de sortie tamponné pour lire et écrire des octets.
Code côté serveur:
Package com.gloomyfish.socket.tutorial.two; import java.io.dataOutputStream; Importer java.io.ioException; import java.net.serversocket; import java.net.socket; La classe publique HellOservice étend Thread {private Serversocket SERVERSocket; Public HelloService (int port) lève ioException {Serversocket = new SERVERSocket (port); } public void run () {try {while (true) {System.out.println ("Waiting for Client sur le port" + serversocket.getLocalport ()); Socket client = serversocket.Accept (); // Bloqué et en attente de Socket Socket System.out.println ("Just Connected to" + client.getRemotesocketAddress ()); DataOutputStream dos = new DataOutputStream (client.getOutputStream ()); BYTE [] Bonjour = "Hello, Java Socket" .getBytes (); DOS.WRITE (Hello, 0, Hello.Length); dos.close (); client.close (); }} catch (exception e) {e.printStackTrace (); }} public static void main (String [] args) {try {Helloservice Service = new HellOservice (9999); service.start (); } catch (ioException e) {e.printStackTrace (); }}} Le serveur écoute le port 9999 et attend la connexion, et utilise le thread Java pour réaliser le démarrage côté serveur.
Le code client est le suivant:
Package com.gloomyfish.socket.tutorial.two; import java.io.datainputStream; Importer java.io.ioException; Importer java.net.inetsocketAddress; Importer java.net.socketAddress; Importer java.net.socketAddress; classe publique HelloClient {private int clientNumber; Adresse privée de socketaddress; public helloclient (int clientnum) {clientnum = clientnum; } public void setupClients (String ServerHostName, int port) lève ioException {adresse = new IneTSocketAddress (serverHostName, port); for (int i = 0; i <clientNumber; i ++) {System.out.println (); System.out.println ("Démarrer le client n °" + (i + 1)); Socket socket = new socket (); socket.connect (adresse); DataRainPutStream BufferedReader = new DataRainputStream (socket.getInputStream ()); octet [] cbuff = nouveau octet [256]; char [] Charbuff = nouveau char [256]; int size = 0; while ((size = bufferedReader.read (cbuff))> 0) {convertBytetochar (cbuff, charbuff, taille); System.out.println (Charbuff); } bufferedReader.close (); socket.close (); }} private void convertBytetochar (byte [] cbuff, char [] charbuff, int size) {for (int i = 0; i <charbuff.length; i ++) {if (i <size) {Charbuff [i] = (char) cbuff [i]; } else {Charbuff [i] = ''; }}} public static void main (string [] args) {try {helloclient client = new HelloClient (10); client.setupClients ("localhost", 9999); } catch (ioException e) {e.printStackTrace (); }}} Démarrez 10 clients pour se connecter au côté du serveur, et après avoir reçu la salutation du serveur, le client ferme la connexion.
Conseil spécial: assurez-vous d'initialiser le tampon charbuff
Résultats du programme en cours d'exécution:
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.