Qu'est-ce que la prise
Les deux programmes sur le réseau implémentent l'échange de données via une connexion de communication à deux voies. La prise est généralement utilisée pour obtenir la connexion entre le client et la partie de service. Socket est une interface de programmation très populaire du protocole TCP / IP, et une prise est déterminée par une adresse IP et un numéro de port.
Cependant, les types de protocoles pris en charge par Socket ne sont pas seulement TCP / IP, il n'y a donc pas nécessairement de lien entre les deux. Dans l'environnement Java, la programmation de socket se réfère principalement à la programmation réseau basée sur le protocole TCP / IP.
Le processus de communication de socket
Que le serveur End Listen (Monitor) ait une demande de connexion, le client envoie une demande de connexion au côté du serveur et que le serveur renvoie le message d'accès au client. Une connexion est établie. Le serveur et le client peuvent communiquer avec l'autre partie via Send, Write et d'autres méthodes.
Pour une prise enfichée complète, les structures de base suivantes doivent être incluses.
(1) créer une prise;
(2) Ouvrez l'entrée / débit de sortie connectée à la prise;
(3) le fonctionnement de lecture / écriture de la prise en fonction d'un certain protocole;
(4) éteindre la douille. ne rien faire de l'influence.).)
Créer une prise
Java fournit deux types de sockets et de serveurs dans Java.net, qui sont utilisés pour représenter le client et le serveur d'une connexion à deux voies. Ce sont deux très bonnes classes qui sont très bonnes, ce qui est pratique à utiliser. La méthode de la structure est la suivante:
Socket (Adresse Indaddress, port int); LocalAddr, int localport) (INETADDDRESS Adresse, intaddddress localddr, int localport) serversocket (port int).
Parmi eux, l'adresse IP, le nom d'hôte et le numéro de port de l'autre partie dans la connexion à deux voies, les flux. Adresse hôte de Serversocket), IMP est la classe parent de la prise, qui peut être utilisée pour créer un Serversocket et peut être utilisée pour créer une prise. Le nombre signifie le nombre maximal de connexions que le serveur peut prendre en charge. Par exemple: Apprentissage du réseau vidéo http://www.xxspw.com
Socket client = nouvelle prise
Notez que lors de la sélection d'un port, vous devez être prudent. Chaque port fournit un service spécifique. Le numéro de port de 0 ~ 1023 est réservé par le système. Choisissez le numéro de port, il est préférable d'en choisir un supérieur à 1023. Le nombre est d'empêcher les conflits.
Si une erreur se produit lors de la création d'une prise, IOException sera générée et elle doit être traitée dans le programme. Par conséquent, la création d'une prise ou de SERVERSOCKET doit être capturée ou lancée.
Code
serveur
Socket de package; . Les fois "+ Count +"! ) ot client {client .close ();}} enfin {server.close ();}}}
client
Package de package; . CIN. }}}}}}
IP de liaison du serveur
Lors de la rédaction de sockets avec C, la structure struct sockaddr_in peut spécifier SIN_ADDR.S_ADDR, c'est-à-dire que vous pouvez spécifier l'adresse IP.
Je souhaite peut-être lier l'adresse IP de la carte réseau ETH0, car mon LO et WLAN0 peuvent utiliser un hôte virtuel Nginx avec un port.
plan
Un constructeur de SERVERSOCKET est le suivant:
Public Serversocket (port int, intaddddress bindddr) lève ioException
paramètre:
Port-Port TCP local
arriéré de backlog dans le backlog
BindAdddr-pour être obligé par le serveur
Parce que l'inetAddress n'a pas de constructeur, je suis emmêlé ici pendant un certain temps.
Par exemple le code
INDADRESS BINDIP = INETADdress.getByName ("192.168.1.168"); Accès simultané
Le serveur gère plusieurs clients en ajoutant des demandes multiples en même temps.
Code de serveur
Package Capitalsocket; Static int clientnum = 0; public static void main (String args []) lance une exception {Serversocket écouteur = new serversocket me ("192.168.1.168"); ), CapitalizeServer.ClientNum ++); (Socket s, int id) {this.client = s; true) {String data = input.readline (); )); ;} Catch (ioException e) {e.printStackTrace ();}}}}}}}}}}}}
Code client code client n'a pas changé, ajoutant une opération de sortie
Package Capitalsocket; 1.168 ", 9898); try {printwriter output = new PrintWriter (client.getOutputStream (), true); scanner cin = new Scanner (System.in); String words; while (cin .hasnext ()) {words = cin. NextLine (); Output.println (mots); ;