Maison >Java >javaDidacticiel >Explication détaillée des exemples de programmation réseau Java
1. Socket
Le pilote réseau fournit une interface et un mécanisme de programmation d'application, qui peut être assimilé à une application de terminal portuaire tant que les marchandises sont placées ici, même si la livraison des marchandises est terminée. Il est créé dans l'application, établit une relation avec le pilote via un mécanisme de liaison et s'indique l'adresse IP et le port correspondants.
Socket est une classe de programmation réseau en Java, située dans le package java.net.
---- DatagramSocket // Utilisé pour la communication UDP
---- ServerSocket // Utilisé pour la communication TCP, utilisé côté serveur
---- Socket //Serveur et client pour la communication TCP
2. Programme réseau UDP
La classe InetAddress représente l'adresse IP (Internet Protocol)
// static InetAddress getLocalHost() lance UnknownHostException Renvoie l'hôte local
//static InetAddress getByName(String host) Détermine l'adresse IP de l'hôte en fonction du nom d'hôte. Le nom d'hôte peut être le nom de la machine
Formulaire de représentation
//static InetAddress[] getAllByName (String host) en fonction du nom d'hôte renvoie un tableau de son adresse IP.
static void ipDemo() throws UnknownHostException{ InetAddress netAddr=InetAddress.getLocalHost(); //取得本地电脑的一些信息System.out.println(netAddr.toString()); System.out.println(netAddr.getHostAddress()); System.out.println(netAddr.getHostName()); //取得其他电脑的信息InetAddress netAddr2=InetAddress.getByName("DELL-PC"); //这里也可以传IP地址System.out.println(netAddr2.getHostAddress()); //169.254.170.71System.out.println(netAddr2.getHostName()); //DELL-PC //取得百度的地址InetAddress [] ipList=InetAddress.getAllByName("www.baidu.com");for(InetAddress addr:ipList){ System.out.println(addr.toString()); } }
3. Envoi et réception UDP DatagramSocket, DatagramPacket
//Exemple 1 L'envoi et la réception les plus simples
Expéditeur == Pour importer le package java.net
Envoyer des données via UDP :
1) Établir le service UDPSocket
2) Fournir des données et les données sont encapsulées dans une donnée paquet DatagramPacket (byte[] buf, int length, InetAddress adresse, int port) //Il existe plusieurs constructeurs
3) Envoyer des données via le service Socket
4 ) Fermez la ressource
import java.net.*;class Sender4{//DatagramPacket (byte[] buf, int length, InetAddress address, int port) public static void main(String [] args) throws Exception { byte [] buff="hello cat".getBytes(); DatagramSocket socket=new DatagramSocket(); DatagramPacket packet=new DatagramPacket(buff,buff.length,InetAddress.getByName("192.168.0.103"),8888); socket.send(packet); socket.close(); System.out.println("ok"); } }
--Récepteur
1) Créez un service Socket et spécifiez d'écouter sur un certain port
2) Créez un DatagramPacket pour recevoir des données
3) Sortez les données du package
4) Fermez la ressource
import java.net.*;class Receive4 {public static void main(String [] args) throws Exception { DatagramSocket socket=new DatagramSocket(8888); //别忘了端口号byte[] buff=new byte[1024] ; DatagramPacket packet=new DatagramPacket(buff,buff.length); socket.receive(packet); String senderIp=packet.getAddress().getHostAddress(); String senderData=new String(packet.getData(),0,packet.getLength());int senderPort=packet.getPort(); System.out.println(senderIp+"---"+senderData+"---"+senderPort); socket.close(); } }
/ /Exemple 2, envoi et réception cycliques
import java.net.*;import java.io.*;class NewSender{public static void main(String [] args) throws Exception { System.out.println("发送端启动了"); DatagramSocket socket=new DatagramSocket(); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //包装键盘输入流String str=null;while((str=br.readLine())!=null){byte [] buff=str.getBytes(); DatagramPacket packet=new DatagramPacket(buff,buff.length,InetAddress.getByName("127.0.0.1"),9000); socket.send(packet); } br.close(); socket.close(); } }
import java.net.*;class NewReceiver{public static void main(String [] args) throws Exception { DatagramSocket socket=new DatagramSocket(9000); System.out.println("接收端启动了"); while(true){ byte [] buff=new byte[1024] ; DatagramPacket packet=new DatagramPacket(buff,buff.length); socket.receive(packet); String senderIp=packet.getAddress().getHostAddress(); int sendPort=packet.getPort(); String msg= new String(packet.getData(),0,packet.getLength()); System.out.println(senderIp+":"+sendPort+":"+msg); } } }
Exemple 3 : programme de salle de discussion multithread
class Chat {public static void main(String [] args) {new Thread(new SendThread()).start(); new Thread(new ReceiveThread()).start(); } }
//发送端import java.io.*;import java.net.*;class SendThread implements Runnable { private DatagramSocket socket;public void run() {try{ socket=new DatagramSocket(); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String msg=null;while((msg=br.readLine())!=null){byte[] buff=msg.getBytes(); DatagramPacket packet=new DatagramPacket(buff,buff.length,InetAddress.getByName("127.0.0.1"),10000); socket.send(packet); } socket.close(); br.close(); }catch(Exception ex){ ex.printStackTrace(); } } }
//接收端import java.net.*;class ReceiveThread implements Runnable{ private DatagramSocket socket; public void run(){try{ socket=new DatagramSocket(10000);while(true){byte [] buff=new byte[1024]; DatagramPacket packet=new DatagramPacket(buff,buff.length); socket.receive(packet); String senderIp=packet.getAddress().getHostAddress();int senderPort=packet.getPort(); String msg=new String(packet.getData(),0,packet.getLength()); System.out.println(senderIp+":"+senderPort+":"+msg); } }catch(Exception ex) { System.out.println(ex.getMessage()); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!