Programação Java Network
programação de rede significa escrever prazo sobre o programa (de computador) vários dispositivos, estes dispositivos são conectados através de uma rede.
pacote java.net na API J2SE contém classes e interfaces que fornecem detalhes de comunicação de baixo nível. Você pode usar essas classes e interfaces para se concentrar em resolver o problema, ao invés de se concentrar em detalhes de comunicação.
pacote java.net fornece suporte para dois protocolos de rede comuns:
- TCP: TCP é a abreviatura de Transmission Control Protocol, o que garante a comunicação segura entre dois aplicativos. Comumente usado para o protocolo Internet, chamado TCP / IP.
- UDP: UDP é uma abreviatura de User Datagram Protocol, um protocolo sem conexão. Fornecendo o pacote de dados a serem transmitidos entre os dados de aplicação.
Este tutorial explica os dois tópicos seguintes.
- Tomada de programação: Este é o conceito de rede mais amplamente usado, ele foi explicado em grande detalhe a
- Processamento URL: Este capítulo falou em outro espaço, clique aqui para saber mais sobre o URL manipulação da linguagem Java .
Programação de soquete
Sockets usar TCP fornece um mecanismo de comunicação entre os dois computadores. programa cliente cria um socket e tentar ligar à tomada de servidor.
Quando a conexão é estabelecida, o servidor irá criar um objeto Socket. Cliente e servidor agora pode escrever e ler o objeto Socket para se comunicar.
classe java.net.Socket representa um socket, e fornece uma classe java.net.ServerSocket para ouvir programa de servidor cliente e estabelecer um mecanismo para se conectar com eles.
Ela ocorre quando a conexão TCP utilizando os seguintes passos para estabelecer uma tomada entre dois computadores:
- servidor ServerSocket instanciar um objeto que representa a porta de comunicações no servidor.
- chamadas do servidor classe ServerSocket aceitamos o método (), que vai esperar até que um cliente se conecta ao servidor em uma determinada porta.
- Quando o servidor está à espera de um cliente para instanciar um objeto Socket, especifique o nome do servidor e número de porta para solicitar uma conexão.
- construtor classe Socket tenta conectar o cliente para o servidor e número da porta especificada. Se a comunicação é estabelecida, para criar um cliente de soquete objecto pode comunicar com o servidor.
- No lado do servidor, aceite () retorna uma nova referência servidor socket para o socket ligado à tomada do cliente.
O TCP é um protocolo de comunicação bidireccional, de modo que os dados podem ser enviados através das duas correntes de dados ao mesmo tempo. A seguir, uma classe completa fornece vários métodos úteis para alcançar os soquetes.
métodos de classe ServerSocket
Os aplicativos de servidor usando classe java.net.ServerSocket para uma porta e escuta as solicitações do cliente.
classe ServerSocket tem quatro construtores:
Não. | método Descrição |
1 | ServerSocket pública (porta int) throws IOException Criar uma ligação a uma porta específica do soquete do servidor. |
2 | ServerSocket pública (porta int, int backlog ) throws IOException Com o atraso especificado Cria um socket servidor e liga para o número de porta local especificado. |
3 | ServerSocket pública (porta int, backlog int , InetAddress endereço) throws IOException Usando a porta especificada, ouvir backlog, e ligar o endereço IP local do servidor é criado. |
4 | ServerSocket pública () lança IOException Cria um socket de servidor independente. |
Cria um socket de servidor independente. Se o método construtor ServerSocket não lançar uma exceção, isso significa que a sua candidatura foi ligado com êxito para a porta especificada, e atende a pedidos de clientes.
Aqui estão alguns classe métodos ServerSocket comum:
Não. | método Descrição |
1 | getLocalPort int público () Retorna a porta na qual este soquete está escutando. |
2 | Tomada pública aceitar () throws IOException Ele ouve e aceita esta tomada. |
3 | setSoTimeout public void (timeout int) Ao especificar o valor de tempo limite para ativar / desativar SO_TIMEOUT, em milissegundos. |
4 | ligam public void (host SocketAddress, int backlog) Vincula o ServerSocket para um endereço específico (endereço IP e número da porta). |
métodos de classe Socket
java.net.Socket classe nome do cliente e servidor para se comunicar uns com os outros na tomada. Para obter um objeto Socket cliente instanciar eo servidor para obter um objeto Socket é devolvido pelo valor do método accept ().
classe Socket tem cinco construtores.
Não. | método Descrição |
1 | Tomada pública (String host, port int ) lança UnknownHostException, IOException. Cria um soquete de fluxo e conecta-lo para o número da porta especificada no host especificado. |
2 | Tomada pública (host InetAddress, porta int ) throws IOException Cria um soquete de fluxo e conecta-lo para o endereço IP especificado o número da porta especificado. |
3 | Tomada pública (String host, port int , InetAddress localAddress, int localPort) throws IOException. Cria um socket e liga-o à porta remoto especificado no host remoto especificado. |
4 | Tomada pública (host InetAddress, porta int , InetAddress localAddress, int localPort) throws IOException. Cria um socket e liga-o à porta remoto especificado no endereço remoto especificado. |
5 | Tomada pública () Criar um soquete desconectado, o tipo padrão do sistema SocketImpl |
Quando o socket construtor retorna, e não simplesmente instanciar um objeto Socket, ele realmente vai tentar se conectar ao servidor e porta especificada.
Aqui estão alguns métodos de interesse, preste atenção para o cliente eo servidor tem um objeto Socket, independentemente de o cliente ou o servidor pode chamar esses métodos.
Não. | método Descrição |
1 | public void conectar (host SocketAddress, int timeout) throws IOException Esta conexão de soquete para o servidor, e especificar um valor de tempo limite. |
2 | pública InetAddress getInetAddress () O endereço de retorno da conexão socket. |
3 | getPort int público () Retorna este soquete está conectado à porta remota. |
4 | getLocalPort int público () Retorna este socket está ligado a uma porta local. |
5 | pública SocketAddress getRemoteSocketAddress () O endereço de retorno do ponto final neste socket está ligado, se é retornos desconexas nulo. |
6 | pública InputStream getInputStream () lança IOException Retorna um fluxo de entrada para este socket. |
7 | pública OutputStream getOutputStream () lança IOException Retorna um fluxo de saída para este socket. |
8 | public void close () throws IOException Fecha este soquete. |
método de classe InetAddress
Esta classe representa um endereço IP (Internet Protocol). Listados abaixo são úteis quando método de programação Tomada:
Não. | método Descrição |
1 | estática InetAddress getByAddress (byte [] addr ) No caso dado o endereço IP cru, voltar InetAddress objeto. |
2 | estática InetAddress getByAddress (host String, byte [] addr) Segundo a criar nomes de host InetAddress e endereços IP fornecidos. |
3 | estática InetAddress getByName (host String) Determinar o endereço IP da máquina no caso de um determinado nome de host. |
4 | Cordas getHostAddress () Retorna a cadeia de endereço IP (apresentação textual). |
5 | Cordas GetHostName () Obtém o nome do host para esse endereço IP. |
6 | estática InetAddress getLocalHost () Retorna o host local. |
7 | toString String () Converte esse endereço IP para um String. |
instância do cliente de soquete
A seguir GreetingClient é um programa cliente que está conectado através de um soquete para o servidor e enviar um pedido, e depois esperar por uma resposta.
// 文件名 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(); } } }
instância do servidor de soquete
O seguinte programa GreetingServer é um aplicativo do lado do servidor que usa uma Tomada para escutar em uma porta especificada.
// 文件名 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(); } } }
Compilar o código java acima, e execute o seguinte comando para iniciar o serviço, use o número da porta é 6066:
$ java GreetingServer 6066 Waiting for client on port 6066...Abrir algo como os seguintes clientes:
$ 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!