logo

Programação de soquete Java

A programação Java Socket é usada para comunicação entre os aplicativos executados em diferentes JRE.

A programação Java Socket pode ser orientada ou sem conexão.

As classes Socket e ServerSocket são usadas para programação de soquete orientada a conexão e as classes DatagramSocket e DatagramPacket são usadas para programação de soquete sem conexão.

O cliente na programação de soquete deve conhecer duas informações:

  1. Endereço IP do servidor e
  2. Número da porta.

Aqui, faremos comunicação unilateral entre cliente e servidor. Nesta aplicação, o cliente envia uma mensagem para o servidor, o servidor lê a mensagem e a imprime. Aqui, duas classes estão sendo usadas: Socket e ServerSocket. A classe Socket é usada para comunicar cliente e servidor. Através desta classe, podemos ler e escrever mensagens. A classe ServerSocket é usada no lado do servidor. O método accept() da classe ServerSocket bloqueia o console até que o cliente esteja conectado. Após a conexão bem-sucedida do cliente, ele retorna a instância do Socket no lado do servidor.

Programação de soquete em Java

Classe de soquete

Um soquete é simplesmente um ponto final para comunicações entre as máquinas. A classe Socket pode ser usada para criar um soquete.

Métodos importantes

MétodoDescrição
1) InputStream público getInputStream()retorna o InputStream anexado a este soquete.
2) OutputStream público getOutputStream()retorna o OutputStream anexado a este soquete.
3) fechamento de void sincronizado público()fecha este soquete

Classe ServerSocket

A classe ServerSocket pode ser usada para criar um soquete de servidor. Este objeto é utilizado para estabelecer comunicação com os clientes.

Métodos importantes

MétodoDescrição
1) Soquete público aceita()retorna o soquete e estabelece uma conexão entre servidor e cliente.
2) fechamento de void sincronizado público()fecha o soquete do servidor.

Exemplo de programação de soquete Java

Criando Servidor:

Para criar o aplicativo de servidor, precisamos criar a instância da classe ServerSocket. Aqui, estamos usando o número da porta 6666 para a comunicação entre o cliente e o servidor. Você também pode escolher qualquer outro número de porta. O método accept() espera pelo cliente. Se os clientes se conectarem ao número de porta fornecido, ele retornará uma instância de Socket.

 ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client 

Criando Cliente:

Para criar a aplicação cliente, precisamos criar a instância da classe Socket. Aqui precisamos passar o endereço IP ou nome do host do Servidor e um número de porta. Aqui, estamos usando 'localhost' porque nosso servidor está rodando no mesmo sistema.

 Socket s=new Socket('localhost',6666); 

Vamos ver uma programação simples de soquete Java onde o cliente envia um texto e o servidor o recebe e o imprime.

Arquivo: MeuServidor.java

 import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println('message= '+str); ss.close(); }catch(Exception e){System.out.println(e);} } } 

Arquivo: MeuCliente.java

 import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket('localhost',6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF('Hello Server'); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } } 
baixe este exemplo

Para executar este programa, abra dois prompts de comando e execute cada programa em cada prompt de comando, conforme exibido na figura abaixo.

Após executar a aplicação cliente, uma mensagem será exibida no console do servidor.

Programação de rede Java

Exemplo de programação Java Socket (leitura e gravação em ambos os lados)

Neste exemplo, o cliente escreverá primeiro no servidor e depois o servidor receberá e imprimirá o texto. Então o servidor escreverá para o cliente e o cliente receberá e imprimirá o texto. A etapa continua.

Arquivo: MeuServidor.java

 import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=din.readUTF(); System.out.println('client says: '+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }} 

Arquivo: MeuCliente.java

 import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket('localhost',3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println('Server says: '+str2); } dout.close(); s.close(); }}