Latest web development tutorials

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.

Depois que a conexão é estabelecida usando o fluxo de I / O durante as comunicações. Cada encaixe tem uma entrada e uma corrente de fluxo de saída. fluxo de saída de fluxo de entrada cliente para um servidor, fluxo de entrada do cliente para o fluxo de saída do servidor.

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!