Programmazione Java Network
programmazione di rete significa scrivere corsa su più dispositivi programma (computer), questi dispositivi sono collegati attraverso una rete.
pacchetto java.net nelle API J2SE contiene le classi e interfacce che forniscono dettagli di basso livello di comunicazione. È possibile utilizzare queste classi e interfacce di concentrarsi sulla soluzione del problema, piuttosto che concentrarsi sui dettagli di comunicazione.
package java.net fornisce il supporto per due protocolli di rete comuni:
- TCP: TCP è l'acronimo di Transmission Control Protocol, che garantisce una comunicazione affidabile tra due applicazioni. Comunemente utilizzato per il protocollo Internet, chiamato TCP / IP.
- UDP: UDP è l'abbreviazione di User Datagram Protocol, un protocollo senza connessione. Fornire il pacchetto di dati da trasmettere tra i dati delle applicazioni.
Questo tutorial spiega i seguenti due argomenti.
- Presa di programmazione: Questo è il concetto di rete più diffuso, è stato spiegato in grande dettaglio per
- Processing URL: Questo capitolo ha parlato in un altro spazio, clicca qui per saperne di più sulla gestione linguaggio Java URL .
presa di programmazione
Sockets utilizzano TCP fornisce un meccanismo di comunicazione tra i due computer. programma client crea un socket e cercando di connettersi al socket server.
Una volta stabilita la connessione, il server creerà un oggetto Socket. Client e server ora possono scrivere e leggere l'oggetto Socket per comunicare.
Classe java.net.Socket rappresenta una presa di corrente, e fornisce una classe java.net.ServerSocket da ascoltare per il programma client server, e stabilire un meccanismo per connettersi con loro.
Essa si verifica quando la connessione TCP utilizzando la seguente procedura per stabilire una presa tra due computer:
- Server ServerSocket istanziare un oggetto che rappresenta la porta di comunicazione sul server.
- chiamate al server di classe ServerSocket accettano metodo (), che aspettare fino a quando un client si connette al server su una determinata porta.
- Quando il server è in attesa di un client per istanziare un oggetto Socket, specificare il nome del server e il numero di porta per richiedere una connessione.
- costruttore della classe Socket tenta di connettere il client al numero di server e la porta specificata. Se viene stabilita la comunicazione, per creare un client oggetto Socket può comunicare con il server.
- Metodo Sul lato server, accept () restituisce un nuovo riferimento server socket alla presa collegato alla presa cliente.
TCP è un protocollo di comunicazione bidirezionale, quindi i dati possono essere inviati attraverso i due flussi di dati contemporaneamente. La seguente è una classe completa fornisce diversi metodi utili per realizzare prese.
metodi di classe ServerSocket
Le applicazioni server utilizzando classe java.net.ServerSocket per una porta e ascolta le richieste del cliente.
classe ServerSocket ha quattro costruttori:
No. | metodo Descrizione |
1 | ServerSocket pubblico (int porta) throws IOException Creare un legame con una specifica porta del socket server. |
2 | ServerSocket pubblico (porta int, int backlog ) throws IOException Con l'arretrato specificato crea un socket server e si lega al numero di porta locale specificata. |
3 | ServerSocket pubblico (porta int, int backlog , InetAddress indirizzo) throws IOException Utilizzando la porta specificata, ascoltare arretrato, e per legare l'indirizzo IP locale del server viene creato. |
4 | ServerSocket pubblico () throws IOException Crea un socket server non legato. |
Crea un socket server non legato. Se il metodo di costruzione ServerSocket non un'eccezione, significa che l'applicazione è stata vincolata con successo alla porta specificata, e ascolta le richieste del cliente.
Qui ci sono alcuni comuni metodi di classe ServerSocket:
No. | metodo Descrizione |
1 | public int getLocalPort () Restituisce la porta su cui questo socket è in ascolto. |
2 | Socket pubblico accept () throws IOException Lui ascolta e accetta questa presa. |
3 | setSoTimeout public void (int timeout) Specificando il valore di timeout per abilitare / disabilitare SO_TIMEOUT, in millisecondi. |
4 | bind public void (host SocketAddress, int backlog) Lega il ServerSocket a un indirizzo specifico (indirizzo IP e numero di porta). |
metodi di classe Socket
java.net.Socket nome classe del client e server di comunicare con l'altro nella presa. Per ottenere un oggetto Socket cliente istanziando e il server per ottenere un oggetto Socket viene restituito per valore metodo accept ().
classe Socket ha cinque costruttori.
No. | metodo Descrizione |
1 | Socket pubblico (host String, int porta ) getta UnknownHostException, IOException. Crea un socket di flusso e lo collega al numero di porta specificato sull'host specificato. |
2 | Socket pubblico (InetAddress ospite, int port ) throws IOException Crea un socket di flusso e si connette all'indirizzo IP specificato del numero di porta specificato. |
3 | Socket pubblico (host String, int porta , InetAddress LocalAddress, int localPort) throws IOException. Crea una presa di corrente e si collega alla porta remota specificata sull'host remoto specificato. |
4 | Socket pubblico (host InetAddress, int porta , InetAddress LocalAddress, int localPort) throws IOException. Crea una presa di corrente e si collega alla porta remota specificato l'indirizzo remoto specificato. |
5 | Socket pubblico () Creare una presa non collegata, il tipo di default del sistema SocketImpl |
Al ritorno costruttore Socket, e non semplicemente un'istanza di un oggetto Socket, sarà effettivamente provare a connettersi al server e porta specificata.
Ecco alcuni metodi di interesse, attenzione al cliente e il server ha un oggetto Socket, indipendentemente dal client o il server possono chiamare questi metodi.
No. | metodo Descrizione |
1 | public void connect (SocketAddress ospite, int timeout) throws IOException Questa connessione socket al server, e specificare un valore di timeout. |
2 | pubblico InetAddress getInetAddress () L'indirizzo di ritorno della connessione socket. |
3 | public int getPort () I ritorni questa presa è collegata alla porta remota. |
4 | public int getLocalPort () I ritorni questa presa è destinata a una porta locale. |
5 | pubblico SocketAddress getRemoteSocketAddress () L'indirizzo di ritorno della finale questa presa è collegato, se si tratta di rendimenti non connessi nullo. |
6 | pubblico InputStream getInputStream () throws IOException Restituisce un flusso di input per questa presa. |
7 | pubblico OutputStream getOutputStream () throws IOException Restituisce un flusso di output per questa presa. |
8 | public void close () throws IOException Chiude questa presa. |
metodo della classe InetAddress
Questa classe rappresenta un indirizzo IP (Internet Protocol). Qui di seguito sono utili quando metodo di programmazione Socket:
No. | metodo Descrizione |
1 | static InetAddress getByAddress (byte [] addr ) Nel caso dato l'indirizzo IP grezzo, tornare oggetto InetAddress. |
2 | static InetAddress getByAddress (host String, byte [] addr) Secondo per creare nomi host InetAddress e gli indirizzi IP forniti. |
3 | static InetAddress getByName (host String) Determinare l'indirizzo IP dell'host, nel caso di un determinato nome host. |
4 | String getHostAddress () Restituisce la stringa indirizzo IP (presentazione testuale). |
5 | String getHostName () Ottiene il nome host per l'indirizzo IP. |
6 | static InetAddress getLocalHost () Restituisce l'host locale. |
7 | String toString () Converte questo indirizzo IP in una stringa. |
istanza del client Socket
Il seguente GreetingClient è un programma client che si connette tramite un socket al server e inviare una richiesta, poi attendere una risposta.
// 文件名 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(); } } }
istanza del server Socket
Il seguente programma GreetingServer è un'applicazione lato server che utilizza socket per l'ascolto su una porta specificata.
// 文件名 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(); } } }
Compilare il codice Java sopra, ed eseguire il seguente comando per avviare il servizio, utilizzare il numero di porta è 6066:
$ java GreetingServer 6066 Waiting for client on port 6066...Aprire qualcosa come i seguenti clienti:
$ 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!