Dieser Artikel stellt hauptsächlich die Klassenmethoden und Beispiele in der Java-Netzwerkprogrammierung vor.
Netzwerkprogrammierung bezieht sich auf das Schreiben von Programmen, die auf mehreren Geräten (Computern) ausgeführt werden über das Internet.
Die J2SE-API im java.net-Paket enthält Klassen und Schnittstellen, die Kommunikationsdetails auf niedriger Ebene bereitstellen. Sie können diese Klassen und Schnittstellen direkt verwenden, um sich auf die Lösung von Problemen statt auf Kommunikationsdetails zu konzentrieren.
Das java.net-Paket bietet Unterstützung für zwei gängige Netzwerkprotokolle:
TCP: TCP ist die Abkürzung für Transmission Control Protocol. Es garantiert zuverlässige Kommunikation zwischen zwei Anwendungen. Wird häufig für Internetprotokolle verwendet, bekannt als TCP/IP.
UDP: UDP ist die Abkürzung für User Datagram Protocol, ein verbindungsloses Protokoll. Stellt Datenpakete bereit, die zwischen Anwendungen gesendet werden sollen.
In diesem Tutorial werden hauptsächlich die folgenden zwei Themen erläutert.
Socket-Programmierung: Dies ist das am weitesten verbreitete Netzwerkkonzept und wurde ausführlich erklärt
URL-Verwaltung: Dieser Teil wird an anderer Stelle besprochen. Klicken Sie hier, um mehr über die URL-Verarbeitung in der Java-Sprache zu erfahren.
Socket-Programmierung
Sockets bieten einen Kommunikationsmechanismus zwischen zwei Computern über TCP. Das Client-Programm erstellt einen Socket und versucht, eine Verbindung zum Socket des Servers herzustellen.
Wenn die Verbindung hergestellt ist, erstellt der Server ein Socket-Objekt. Der Client und der Server können nun kommunizieren, indem sie in das Socket-Objekt schreiben und daraus lesen.
Die Klasse java.net.Socket stellt einen Socket dar, und die Klasse java.net.ServerSocket stellt einen Mechanismus für Serverprogramme bereit, um auf Clients zu hören und Verbindungen mit ihnen herzustellen.
Die folgenden Schritte werden ausgeführt, wenn eine TCP-Verbindung mithilfe von Sockets zwischen zwei Computern hergestellt wird:
Der Server instanziiert ein ServerSocket-Objekt, das einen Port für die Serverkommunikation darstellt.
Der Server ruft die Methode „accept()“ der Klasse „ServerSocket“ auf, die wartet, bis der Client eine Verbindung zum angegebenen Port auf dem Server herstellt.
Während der Server wartet, instanziiert ein Client ein Socket-Objekt und gibt den Servernamen und die Portnummer an, um eine Verbindung anzufordern.
Der Konstruktor der Socket-Klasse versucht, den Client mit dem angegebenen Server und der angegebenen Portnummer zu verbinden. Wenn die Kommunikation hergestellt ist, wird auf dem Client ein Socket-Objekt erstellt, um mit dem Server zu kommunizieren.
Auf der Serverseite gibt die Methode „accept()“ eine neue Socket--Referenz auf dem Server zurück, die mit dem Socket des Clients verbunden ist.
Nach dem Verbindungsaufbau erfolgt die Kommunikation über I/O-Streams. Jeder Socket verfügt über einen Ausgabestream und einen Eingabestream. Der Ausgabestream des Clients ist mit dem Eingabestream des Servers verbunden, und der Eingabestream des Clients ist mit dem Ausgabestream des Servers verbunden.
TCP ist ein bidirektionales Kommunikationsprotokoll, sodass Daten gleichzeitig über zwei Datenströme gesendet werden können. Im Folgenden finden Sie einen vollständigen Satz nützlicher Methoden, die von einigen Klassen zum Implementieren von Sockets bereitgestellt werden.
Methoden der ServerSocket-Klasse
Die Serveranwendung erhält einen Port mithilfe der Klasse java.net.ServerSocket und wartet auf Clientanforderungen.
Die ServerSocket-Klasse verfügt über vier Konstruktormethoden:
|
Methodenbeschreibung | ||||||||||
1 | öffentlicher ServerSocket(int port) löst eine IOException aus Erstellen Sie einen Server-Socket, der an einen bestimmten Port gebunden ist | ||||||||||
2 | public ServerSocket(int port, int backlog) löst eine IOException aus Erstellen Sie einen Server-Socket mit dem angegebenen Backlog und binden Sie ihn an die angegebene lokale Portnummer | ||||||||||
3 | öffentlicher ServerSocket (int-Port, int-Backlog, InetAddress-Adresse) löst eine IOException ausErstellt einen Server mit dem angegebenen Port, dem angegebenen Überwachungs-Backlog und der lokalen IP-Adresse für die Bindung | ||||||||||
4 | public ServerSocket() löst eine IOException ausErstellen Sie einen ungebundenen Server-Socket |
Erstellen Sie einen ungebundenen Server-Socket. Wenn die ServerSocket-Konstruktionsmethode keine Ausnahme auslöst , bedeutet dies, dass Ihre Anwendung erfolgreich an den angegebenen Port gebunden wurde und auf Clientanforderungen wartet.
Hier sind einige gängige Methoden der ServerSocket-Klasse:
|
Methode Beschreibung | ||||||||||||
1 |
public int getLocalPort() Gibt den Port zurück, auf dem dieser Socket lauscht |
||||||||||||
2 | public Socket Accept() löst eine IOException aus Überwachen und akzeptieren Sie diese Socket-Verbindung |
||||||||||||
3 |
public void setSoTimeout(int timeout)
|
||||||||||||
4 | public void bind(SocketAddress host, int backlog)Binde ServerSocket an eine bestimmte Adresse (IP-Adresse). und Portnummer) |
Seriennummer | Methodenbeschreibung |
1 | public Socket(String host, int port) löst UnknownHostException, IOException aus. Erstellt einen Stream-Socket und verbindet ihn mit der angegebenen Portnummer auf dem angegebenen Host |
2 | public Socket(InetAddress host, int port) throws IOExceptionErstellt einen Stream-Socket und verbindet ihn mit der angegebenen Portnummer der angegebenen IP-Adresse td> |
3 | public Socket(String host, int port, InetAddress localAddress, int localPort) löst eine IOException aus >Erstellt einen Socket und verbindet ihn mit dem angegebenen Remote-Port auf dem angegebenen Remote-Host |
4 | public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) löst eine IOException ausErstellt einen Socket und verbindet ihn mit dem angegebenen Remote-Adressen-Remote-Port |
5 | public Socket()passed Der Systemstandardtyp von SocketImpl erstellt eine nicht verbundene socket |
Wenn der Socket-Konstruktor zurückkehrt, instanziiert er nicht einfach ein Socket-Objekt, sondern versucht tatsächlich, eine Verbindung zum angegebenen Server und Port herzustellen.
Einige interessante Methoden sind unten aufgeführt. Beachten Sie, dass sowohl der Client als auch der Server über ein Socket-Objekt verfügen, sodass sowohl der Client als auch der Server diese Methoden aufrufen können.
|
Methodenbeschreibung | ||||||||||||||||||
1 |
public void connect(SocketAddress host, int timeout) throws IOException Verbinden Sie diesen Socket mit dem Server und geben Sie einen Timeout-Wert an |
||||||||||||||||||
2 | public InetAddress getInetAddress()
|
||||||||||||||||||
3 | public int getPort()Zu dieser Menge zurückkehren Remote-Port, mit dem die Schnittstelle verbunden ist | ||||||||||||||||||
4 | public int getLocalPort() Gibt den lokalen Port zurück, an den dieser Socket gebunden ist | ||||||||||||||||||
5 | public SocketAddress getRemoteSocketAddress() Gibt die Adresse des Endpunkts zurück, der mit diesem Socket verbunden ist, oder null, wenn nicht verbunden | ||||||||||||||||||
6 | public InputStream getInputStream() throws IOExceptionGibt den Eingabestream dieses Sockets zurück | ||||||||||||||||||
7 | public OutputStream getOutputStream() throws IOExceptionGibt den Ausgabestream dieses Sockets zurück | ||||||||||||||||||
8 | public void close() löst eine IOException ausDiesen Socket schließen |
Methodenbeschreibung | |
1 | statisch InetAddress getByAddress(byte[] addr)Angegeben die ursprüngliche IP-Adresse, Rückgabe InetAddress-Objekt |
2 | statisch InetAddress getByAddress(String host, byte[] addr)Erstellt eine InetAddress basierend auf dem angegebenen Hostnamen und der IP-Adresse |
3 | static InetAddress getByName(String host)Bestimmen Sie den Host anhand der IP-Adresse des Hostnamens |
4 | String getHostAddress( )Rückgabe der IP-AdresseString (ausgedrückt als Textform) |
5 | String getHostName() Holen Sie sich den Hostnamen dieser IP-Adresse |
6 td>statische InetAddress getLocalHost()Lokalen Host zurückgeben | |
7 | String toString()Konvertieren Sie diese IP-Adresse in String |
Socket-Client-Instanz
Der folgende GreetingClient ist ein Client-Programm, das über Socket eine Verbindung zum Server herstellt, eine Anfrage sendet und dann auf eine Antwort wartet.
// 文件名 GreetingClient.java import java.net.*; import java.io.*; public class GreetingClient { public static void main(String [] args) { String serverName = args[0]; int port = Integer.parseInt(args[1]); try { System.out.println("Connecting to " + serverName + " on port " + port); Socket client = new Socket(serverName, port); System.out.println("Just connected to " + client.getRemoteSocketAddress()); OutputStream outToServer = client.getOutputStream(); DataOutputStream out = new DataOutputStream(outToServer); out.writeUTF("Hello from " + client.getLocalSocketAddress()); InputStream inFromServer = client.getInputStream(); DataInputStream in = new DataInputStream(inFromServer); System.out.println("Server says " + in.readUTF()); client.close(); }catch(IOException e) { e.printStackTrace(); } } }
Socket-Server-Instanz
Das folgende GreetingServer-Programm ist eine serverseitige Anwendung, die Socket verwendet, um einen bestimmten Port abzuhören.
// 文件名 GreetingServer.java import java.net.*; import java.io.*; public class GreetingServer extends Thread { private ServerSocket serverSocket; public GreetingServer(int port) throws IOException { serverSocket = new ServerSocket(port); serverSocket.setSoTimeout(10000); } public void run() { while(true) { try { System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "..."); Socket server = serverSocket.accept(); System.out.println("Just connected to " + server.getRemoteSocketAddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new DataOutputStream(server.getOutputStream()); out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress() + "\nGoodbye!"); server.close(); }catch(SocketTimeoutException s) { System.out.println("Socket timed out!"); break; }catch(IOException e) { e.printStackTrace(); break; } } } public static void main(String [] args) { int port = Integer.parseInt(args[0]); try { Thread t = new GreetingServer(port); t.start(); }catch(IOException e) { e.printStackTrace(); } } }
Kompilieren Sie den obigen Java-Code und führen Sie den folgenden Befehl aus, um den Dienst unter Verwendung der Portnummer 6066 zu starten:
$ java GreetingServer 6066 Waiting for client on port 6066...
Öffnen wie folgt: Kunde:
$ java GreetingClient localhost 6066 Connecting to localhost on port 6066 Just connected to localhost/127.0.0.1:6066 Server says Thank you for connecting to /127.0.0.1:6066 Goodbye!
[Verwandte Empfehlungen]
1.Kostenloses Java-Video-Tutorial
2. Video-Tutorial zur Implementierung von Bildminiaturansichten in gleichen Proportionen in Java
3.Alibaba Java Development Manual
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Netzwerkprogrammier-Sockets. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!