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:
- Endereço IP do servidor e
- 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.
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étodo | Descriçã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étodo | Descriçã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.
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(); }}