Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Socket-Netzwerkprogrammierung

Detaillierte Erläuterung der Socket-Netzwerkprogrammierung

零下一度
零下一度Original
2017-06-27 10:24:141276Durchsuche

java.net.InetAddress-Klasse: Diese Klasse repräsentiert eine Internet Protocol (IP)-Adresse.

Statische Methode:
static InetAddress getLocalHost() gibt den lokalen Host (Ihren eigenen Computer) zurück.
static InetAddress getByName(String host) Bestimmt die IP-Adresse eines Hosts mit einem Hostnamen.
Nichtstatische Methoden:
String getHostAddress() Gibt die IP-Adresszeichenfolge zurück (als Textdarstellung).
String getHostName() Ruft den Hostnamen dieser IP-Adresse ab.


Das empfangende Ende der UDP-Kommunikation: empfängt das vom sendenden Ende gesendete Datagrammpaket und entpackt es
* UDP-bezogene Klassen:
* java.net.DatagramPacket: Diese Klasse repräsentiert Datenberichtspaket.
* Funktion: Datagrammpakete verwenden, um Daten vom Absender zu empfangen
* java.net.DatagramSocket: Diese Klasse stellt einen Socket dar, der zum Senden und Empfangen von Datagrammpaketen verwendet wird.
* Funktion: Datagrammpakete senden, Datagrammpakete empfangen
* Socket: Netzwerkobjekt, das IP-Adresse und Portnummer bindet
*
* Konstruktionsmethode:
* DatagramPacket( byte[] buf, int Länge)
* Konstruieren Sie DatagramPacket, um Datenpakete mit der Länge Länge zu empfangen.
* DatagramSocket(int port)
* Erstellt einen Datagramm-Socket und bindet ihn an den angegebenen Port auf dem lokalen Host.
*
* Mitgliedsmethoden:
* void keep(DatagramPacket p) Empfängt ein Datagrammpaket von diesem Socket.
*
* Implementierungsschritte:
* 1. Erstellen Sie ein DatagramPacket-Objekt und empfangen Sie das Datagramm vom Absender
* 2. Erstellen Sie ein DatagramSocket-Objekt und ordnen Sie es der vom Sender anzugebenden Portnummer zu System
* 3. Verwenden Sie die Methode „receive“ in DatagramSocket, um das Datagrammpaket vom Absender zu empfangen
* 4. Entpacken
* DatagramPacket verfügt über Methoden, die sich auf Datagrammpakete beziehen
* int getLength() Ermitteln Sie die Länge der Daten vom Absender
* InetAddress getAddress() Ruft das IP-Adressobjekt des Absenders ab
* int getPort() Ruft die Portnummer des Absenders ab (vom System zufällig zugewiesen)
* 5. Ressourcen freigeben

 1 public static void main(String[] args) throws IOException { 2         //1.创建DatagramPacket对象,接收发送端的数据报 3         byte[] bytes = new byte[1024];//数据最大传输64kb  1024*64 4         DatagramPacket dp = new DatagramPacket(bytes, bytes.length); 5         //2.创建DatagramSocket对象,并且和系统要指定的端口号 6         DatagramSocket ds = new DatagramSocket(8888); 7         //3.使用DatagramSocket中的方法receive发送端接收数据报包 8         ds.receive(dp); 9         //4.拆包10         //int getLength()  获取发送端数据的长度11         int length = dp.getLength();12         //InetAddress getAddress() 获取发送端的IP地址对象13         String ip = dp.getAddress().getHostAddress();14         //int getPort()  获取发送端的端口号(系统随机分配的)15         int port = dp.getPort();16         17         System.out.println(new String(bytes,0,length)+"ip:"+ip+",端口号"+port);18         //5.释放资源19         ds.close();20     }

Das sendende Ende der UDP-Kommunikation: Packt die Daten und sendet das Datagrammpaket entsprechend der IP-Adresse und dem Port des empfangenden Endes
*
* UDP-bezogene Klassen:
* java.net.DatagramPacket: Diese Klasse repräsentiert ein Datagrammpaket.
* Funktion: Packen Sie die Daten sowie die IP-Adresse und Portnummer des Empfängers
* java.net.DatagramSocket: Diese Klasse stellt einen Socket dar, der zum Senden und Empfangen von Datagrammpaketen verwendet wird.
* Funktion: Datagrammpakete senden, Datagrammpakete empfangen
* Socket: Netzwerkobjekt, das IP-Adresse und Portnummer bindet
*
* Konstruktionsmethode:
* DatagramPacket( byte[] buf, int Länge, InetAddress-Adresse, int Port)
* Konstruieren Sie ein Datagrammpaket, das verwendet wird, um ein Paket der Länge Länge an die angegebene Portnummer auf dem angegebenen Host zu senden.
* DatagramSocket()
* Konstruiert einen Datagramm-Socket und bindet ihn an jeden verfügbaren Port auf dem lokalen Host.
*
* Mitgliedsmethoden:
* void send(DatagramPacket p) Senden Sie ein Datagrammpaket von diesem Socket.
*
* Implementierungsschritte:
* 1. Erstellen Sie ein DatagramPacket-Objekt, kapseln Sie die Daten sowie die IP-Adresse und Portnummer des Empfängers (erstellen Sie einen Container)
* 2. Erstellen Sie einen DatagramSocket Objekt (ein Dock erstellen)
* 3. Verwenden Sie die Methode send in DatagramSocket, um Datagrammpakete zu senden
* 4. Geben Sie Ressourcen frei
*
* UDP-Kommunikation ist für verbindungslose Kommunikation: Daten können unabhängig davon gesendet werden Unabhängig davon, ob es eine Empfangsseite gibt oder nicht, tritt ein Datenverlust auf der Empfangsseite auf.

 1 public static void main(String[] args) throws IOException { 2         //1.创建DatagramPacket对象,封装数据和接收端的IP地址,端口号(创建集装箱) 3         byte[] bytes = "你好UDP!".getBytes(); 4         InetAddress address = InetAddress.getByName("127.0.0.1"); 5         DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, 8888); 6         //2.创建DatagramSocket对象(创建码头) 7         DatagramSocket ds = new DatagramSocket(); 8         //3.使用DatagramSocket中的方法send发送数据报包 9         ds.send(dp);10         //4.释放资源11         ds.close();12     }

Client der TCP-Kommunikation: sendet eine Anforderungsverbindung an den Server und empfängt die zurückgeschriebenen Daten vom Server
*
* stellt die Klasse des Clients dar:
* java.net.Socket: Diese Klasse implementiert Client-Sockets (sie kann auch „Sockets“ genannt werden).
*
* Konstruktor:
* Socket(InetAddress-Adresse, int Port) Erstellt einen Stream-Socket und verbindet ihn mit der angegebenen Portnummer der angegebenen IP-Adresse.
* Socket(String host, int port) Erstellt einen Stream-Socket und verbindet ihn mit der angegebenen Portnummer auf dem angegebenen Host.
*
* Mitgliedsmethoden:
* OutputStream getOutputStream() Gibt den Ausgabestream dieses Sockets zurück.
* InputStream getInputStream() Gibt den Eingabestream dieses Sockets zurück.
*
* Hinweis: Für die Dateninteraktion zwischen dem Client und dem Server können Sie nicht das von Ihnen selbst erstellte Stream-Objekt verwenden. Sie müssen den in Socket bereitgestellten Stream verwenden
*
* Implementierungsschritte:
* 1. Erstellen Sie ein Client-Socket-Objekt und binden Sie die IP-Adresse und die Portnummer des Servers
* 2. Verwenden Sie die Methode getOutputStream im Socket, um den Netzwerkausgabestream abzurufen
* 3. Verwenden Sie die Methode write im OutputStream-Netzwerkstream zum Senden von Daten an den Server
* 4. Verwenden Sie die Methode getInputStream in Socket, um den Netzwerkeingabestream zu erhalten
* 5. Verwenden Sie die Methode read im InputStream-Netzwerkstream, um die vom zurückgeschriebenen Daten zu lesen Server
* 6. Ressourcen freigeben
*
* Hinweis: TCP ist verbindungsorientierte Kommunikation. Der Server muss zuerst gestartet werden, wenn der Server nicht gestartet wird
* , ConnectException wird geworfen: Verbindung verweigert: verbinden

 1 public static void main(String[] args) throws IOException { 2         //1.创建客户端Socket对象,绑定服务器的IP地址和端口号 3         Socket socket = new Socket("127.0.0.1", 9999); 4         //2.使用Socket中的方法getOutputStream获取网络输出流 5         OutputStream os = socket.getOutputStream(); 6         //3.使用OutputStream网络流中的方法write给服务器发送数据 7         os.write("你好服务器".getBytes()); 8         //4.使用Socket中的方法getInputStream获取网络输入流 9         InputStream is = socket.getInputStream();10         //5.使用InputStream网络流中的方法read读取服务器回写的数据11         byte[] bytes = new byte[1024];12         int len = is.read(bytes);13         System.out.println(new String(bytes,0,len));14         //6.释放资源15         socket.close();16     }

TCP通信的服务器端:接收客户端的发送的数据,给客户端回写数据
*
* 表示服务器的类:
* java.net.ServerSocket:此类实现服务器套接字。
*
* 构造方法:
* ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
*
* 有一件特别重要的事:服务器必须的知道是哪个客户端请求的服务器
* 所有可以使用accept方法获取请求的客户端
* 成员方法:
* Socket accept() 侦听并接受到此套接字的连接。
*
* 实现步骤:
* 1.创建ServerSocket对象,和系统要指定的端口号
* 2.使用ServerSocket中的方法accept获取请求的客户端对象
* 3.使用Socket中的方法getInputStream获取网络输入流
* 4.使用InputStream网络流中的方法read读取客户端发送的数据
* 5.使用Socket中的方法getOutputStream获取网络输出流
* 6.使用OutputStream网络流中的方法write给客户端回写数据
* 7.释放资源(ServerSocket,Socket)

 1 public static void main(String[] args) throws IOException { 2         //1.创建ServerSocket对象,和系统要指定的端口号 3         ServerSocket server = new ServerSocket(9999); 4         //2.使用ServerSocket中的方法accept获取请求的客户端对象 5         Socket socket = server.accept(); 6         //3.使用Socket中的方法getInputStream获取网络输入流 7         InputStream is = socket.getInputStream(); 8         byte[] bytes = new byte[1024]; 9         //4.使用InputStream网络流中的方法read读取客户端发送的数据10         int len = is.read(bytes);11         System.out.println(new String(bytes,0,len));12         //5.使用Socket中的方法getOutputStream获取网络输出流13         OutputStream os = socket.getOutputStream();14         //6.使用OutputStream网络流中的方法write给客户端回写数据15         os.write("收到".getBytes());16         //7.释放资源(ServerSocket,Socket)17         socket.close();18         server.close();19     }

 

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Socket-Netzwerkprogrammierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn