Maison Java javaDidacticiel Compréhension approfondie de l'analyse de la communication Java Socket

Compréhension approfondie de l'analyse de la communication Java Socket

Mar 07, 2017 am 10:21 AM

Cet article présente principalement une compréhension approfondie de Java Socket. La communication réseau en Java est implémentée via Socket. Socket est divisé en deux catégories : ServerSocket et Socket. Ceux qui sont intéressés peuvent en savoir plus

<.> Brève description

Socket en Java est divisé en deux types : Socket ordinaire et NioSocket Voici une introduction à Socket.

Nous pouvons comparer Socket à un moyen de transport entre deux villes. Avec lui, vous pouvez faire la navette entre les deux villes. Il existe de nombreux types de moyens de transport, et chaque moyen de transport a également une correspondance. règles de circulation. Il en va de même pour les Sockets, il en existe de nombreux types. Dans la plupart des cas, des sockets de flux TCP/IP sont utilisés, ce qui constitue un protocole de communication stable. (Comparaison de TCP/IP et UDP)

La communication réseau en Java est implémentée via Socket. Socket est divisé en deux catégories : ServerSocket et Socket est utilisé côté serveur pour écouter les requêtes via la méthode d'acceptation. . Le Socket est renvoyé après la requête. Le Socket est utilisé pour terminer spécifiquement la transmission de données. Le client utilise directement le Socket pour lancer une requête et transmettre des données.

L'utilisation de ServerSocket peut être divisée en trois étapes :

1. Créer ServerSocket. Il existe au total 5 méthodes de construction de ServerSocket. ServerSocket (port int) est généralement utilisé, et seul le numéro de port (port) est requis.


2. Appelez la méthode accept du ServerSocket créé pour écouter. La méthode accept est une méthode bloquante, ce qui signifie qu'après avoir appelé la méthode accept, le programme s'arrêtera et attendra la demande de connexion, et le programme ne continuera pas jusqu'à ce que la demande soit reçue. Lors de la réception de la demande, la méthode accept renverra un Socket.


3. Utilisez le Socket renvoyé par la méthode accept pour communiquer avec le client.

Châtaigne

Client :


package IO;

import java.io.*;
import java.net.Socket;
import java.util.Date;

/**
 * Created by zhengbin06 on 2017/2/2.
 */
public class Client {
  public static void main(String[] args) {
    String msg = "Client Data";
    try {
      Socket socket = new Socket("127.0.0.1", 9090);

      // 先写、再读
      PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
      // 发送数据
      printWriter.println(msg);
      printWriter.flush();
      // 获得服务端返回的数据
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      String line = bufferedReader.readLine();
      System.out.println("received from server: " + line + "\ttime=" + new Date().getTime());
      // 关闭资源
      printWriter.close();
      bufferedReader.close();
      socket.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
Copier après la connexion

Serveur :


package IO;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

/**
 * Created by zhengbin06 on 2017/2/2.
 */
public class Server {
  private static Socket socket = null;
  private static ServerSocket serverSocket = null;
  public static void main(String[] args) throws IOException {
    BufferedReader bufferedReader = null;
    PrintWriter printWriter = null;
    try {
      // 创建一个ServerSocket监听9090端口
      serverSocket = new ServerSocket(9090);
      while (true) {
        System.out.println("开始等待请求。。。。");
        // 等待请求
        // 监听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
        socket = serverSocket.accept();
        System.out.println("接收到请求:" + socket.toString() + "\ttime=" + new Date().getTime());
        // 接收到请求后使用socket进行通信, 创建BufferedReader用于读取数据
        bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = bufferedReader.readLine();
        System.out.println("received from client: " + line + "\ttime=" + new Date().getTime());
  
        // 创建PrintWriter, 用于发送数据
        printWriter = new PrintWriter(socket.getOutputStream());
        printWriter.println("received data: " + line + "\ttime=" + new Date().getTime());
        printWriter.flush();
      }
    } finally {
      // 关闭所有资源
      bufferedReader.close();
      printWriter.close();
      socket.close();
      serverSocket.close();
    }
  }
}
Copier après la connexion

Détails

Demande d'écoute :

Quand Lorsqu'une nouvelle demande Socket arrive, une nouvelle structure de données socket sera créée pour cette connexion. Les informations sur les données socket contiennent l'adresse et le port de l'adresse et du port source de la demande formelle. Cette structure de données nouvellement créée sera associée à une liste de structures de données de connexion en suspens dans l'instance ServerSocket. Notez que l'instance Socket correspondante du serveur n'a pas été créée pour le moment. L'instance Socket du serveur ne reviendra pas tant que la négociation à trois avec le client n'est pas terminée, et la structure de données correspondant à l'instance Socket ne sera pas Les déplacements dans la liste sont effectués dans la liste.

Transmission de données :

Lorsque la connexion a été établie avec succès, le serveur et le client auront une instance Socket, et chaque instance Socket aura un InputStream et un OutputStream . Et échangez des données via ces deux objets.


Vous devez savoir que les E/S réseau sont transmises sous forme de flux d'octets. Lors de la création d'un objet Socket, le système d'exploitation allouera une zone tampon d'une certaine taille pour l'écriture et la lecture des données InputStream et OutputStream. sont complétés via cette zone de cache.


L'extrémité d'écriture écrit les données dans la file d'attente SendQ correspondant au OutputStream. Lorsque la file d'attente est pleine, les données seront transférées vers la file d'attente RecvQ du InputStream à l'autre extrémité du RecvQ. est pleine à ce moment-là, la méthode d'écriture de OutputStream se bloquera jusqu'à ce que la file d'attente RecvQ dispose de suffisamment d'espace pour accueillir les données envoyées par SendQ. Le processus est illustré dans la figure ci-dessous :


Ce qui précède est une compréhension approfondie de l'analyse de la communication Java Socket. Pour plus de contenu connexe, veuillez payer. attention au site PHP chinois (www.php.cn) !



Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles