Lorsque nous voulons nous connecter à un serveur sur le réseau en utilisant TCP/IP en Java, nous devons créer un objet java.net.Socket et nous connecter au serveur. Si vous souhaitez utiliser Java NIO, vous pouvez également créer un objet SocketChannel dans Java NIO.
Créer une prise
L'exemple de code suivant est connecté au port 80 sur le serveur avec l'adresse IP 78.64.84.171. Ce serveur est notre serveur Web (www.VeVB.COm) et le port 80 est le port du service Web.
Copiez le code comme suit :
Socket socket = nouveau Socket("78.46.84.171", 80);
Nous pouvons également utiliser des noms de domaine à la place des adresses IP comme dans l'exemple suivant :
Copiez le code comme suit :
Socket socket = nouveau Socket("VeVB.COm", 80);
Socket envoie des données
Pour envoyer des données via Socket, nous devons obtenir le flux de sortie du Socket (OutputStream). L'exemple de code est le suivant :
Copiez le code comme suit :
Socket socket = nouveau Socket("VeVB.COm", 80);
OutputStream out = socket.getOutputStream();
out.write("certaines données".getBytes());
out.flush();
out.close();
socket.close();
Le code est très simple, mais si vous souhaitez envoyer des données au serveur via le réseau, vous ne devez pas oublier d'appeler la méthode flush(). L'implémentation TCP/IP sous-jacente du système d'exploitation placera d'abord les données dans un bloc de cache de données plus grand, et la taille du bloc de cache est adaptée à la taille du paquet TCP/IP. (Note du traducteur : l'appel de la méthode flush() écrit uniquement les données dans le cache du système d'exploitation et ne garantit pas que les données seront envoyées immédiatement)
Socket lit les données
Pour lire les données du Socket, nous devons obtenir le flux d'entrée du Socket (InputStream). Le code est le suivant :
Copiez le code comme suit :
Socket socket = nouveau Socket("VeVB.COm", 80);
InputStream dans = socket.getInputStream();
int data = in.read();
//... lire plus de données...
joindre();
socket.close();
Le code n'est pas compliqué, mais il convient de noter que la lecture des données du flux d'entrée du Socket ne lit pas le fichier. La méthode read() est appelée jusqu'à ce que -1 soit renvoyé, car pour le Socket, uniquement lorsque le serveur Quand. la connexion est fermée, le flux d'entrée du Socket renverra -1, mais en fait le serveur ne continue pas à fermer la connexion. Supposons que nous souhaitions envoyer plusieurs requêtes via une seule connexion, alors fermer la connexion dans ce cas serait idiot.
Par conséquent, lors de la lecture de données à partir du flux d'entrée Socket, nous devons connaître le nombre d'octets à lire. Cela peut être réalisé en laissant le serveur indiquer aux données combien d'octets ont été envoyés ou en définissant des caractères spéciaux à la fin des données. . La méthode de balisage est implémentée.
Fermer la prise
Après avoir utilisé le Socket, nous devons fermer le Socket et nous déconnecter du serveur. Pour fermer un Socket, il suffit d'appeler la méthode Socket.close(). Le code est le suivant :
Copiez le code comme suit :
Socket socket = nouveau Socket("VeVB.COm", 80);
socket.close();
(Fin du texte intégral)