Olá, vou tentar explicar um pouco de sockets em java
primeiramente vou apresentar o conceito de o que é esse
tal sockets.
Bem um socket é um canal de comunicação dentre duas míquinas
por determinadas aplicações comunicando entre si.
Em uma conexão de socket sempre existe um computador servidor
e outro computador cliente.
O computador servidor ele tem a função de abrir determinada porta
de comunicação, escutando (LISTENING), até que alguém, míquina cliente,
tente fazer alguma conexão.
Para simplificar vou apresentar os métodos que uma míquina cliente tem que
executar.
1-Cria a conexão, cria um socket com algum servidor.
2-Cria um fluxo de comunicação no socket.
3-Utiliza o fluxo, conversa com a outra míquina.
4-Fecha o fluxo.
5-Fecha o socket.
Agora para uma míquina servidora os métodos mudam um pouco.
1-Cria um socket de escuta (LISTENING), em uma determinada porta.
2-Processa requisições de conexões, cria o socket com a míquina cliente.
3-Processa pedido de fluxo.
4-Utiliza o fluxo, conversa com a outra míquina.
5-Fecha o fluxo.
6-Fecha o socket.
Outra definição importante é referente a portas que são (ligações)
para conexões do seu computador para uma rede externa a ele (saàda)
ou de uma rede externa para ele (entrada).
Só existe compartilhamento, ou comunicação entre dois computadores,
quando e houver conexões de entrada e saàda estabelecidas
entre os dois computadores, através de uma determinada porta do computador
de origem, à uma porta do computador de destino do compartilhamento.
Em java é possàvel executar dois tipos de conexões, modo baseado em conexão
e o sem conexão.
O modo baseado em conexão é algo parecido com uma padaria você pega o bilhete
e pega o pão, você confere para ver se é o pão que requisitou no bilhete e
pronto. (TCP/IP)
http://www.juliobattisti.com.br/artigos ... pip_p1.asp
O modo sem conexão é um pouco mais desorganizado, você entra na padaria e recebe
uma determinada quantidade de pão, doces, etc. Você que se vire com o que quer. (UDP)
http://www.juliobattisti.com.br/artigos ... ip_p11.asp
Não vou entrar em detalhes sobre como fazer uma socket com conexão UDP, é algo
muito parecido com a conexão TCP/IP. Mas para quem quiser dar uma olhada, um breve
tutorial.
http://www.dca.fee.unicamp.br/cursos/Po ... k/udp.html
Em java é extemamente simples criar um socket, vamos dar uma olhada nos construtores
das classes para uma simples conexão TCP/IP do lado do cliente.
Socket(String, int) - Nome do computador (Servidor) e a porta de comunicação.
Socket(String, int, boolean) - Nome do computador (Servidor), e a porta de comunicação,
e se o socket é com fluxo (true) TCP/IP ou não (false) UDP.
Socket(InetAddress, int) - O endereço Internet e a porta para conexão.
Socket(InetAddress, int, boolean) - O endereço da Internet (Servidor), e a porta de comunicação,
e se o socket é com fluxo (true) TCP/IP ou não (false) UDP.
Agora alguns métodos para a utilização de sockets, do lado cliente.
OutputStream getOutputStream() - Retorna a saida de fluxo do socket.
InputStream getInputStream() - Retorna o entrada de fluxo do socket.
InetAdress getInetAdress() - Retorna o InetAdress relacionado ao socket.
int getLocalPort() - Retorna a porta aberta para o socket.
close() - Fecha o socket.
Agora do lado servidor temos algumas mudanças, constutor necessírio para a conexão.
ServerSocket(porta) - Porta que ficarí em escuta (LISTENIG).
Os métodos mais bísicos.
accept() - Aguarda conexão em determinda porta coloca
em escuta (LIsTENING).
close() - Fecha o socket.
E como no lado cliente temos a classe Socket, só que do lado servidor
ele apenas pega o canal de comuniação. Ele faz isso quando aceita uma conexão
usando o método accept(), que retorna um Socket. Esse socket jí é o canal
de comunicação com a míquina cliente. Ou seja, também usaremos a classe
Socket no servidor.
Agora alguns métodos para a utilização de sockets, do lado cliente.
OutputStream getOutputStream() - Retorna a saida de fluxo do socket.
InputStream getInputStream() - Retorna o entrada de fluxo do socket.
InetAdress getInetAdress() - Retorna o InetAdress relacionado ao socket.
int getLocalPort() - Retorna a porta aberta para o socket.
close() - Fecha o socket.
Agora que sabemos como conectar duas míquinas, vamos enviar e receber dados.
Para facilitar o envio e o recebimento de dados temos as classes BufferedReader e
PrintWriter.
O constutor padrão das classes recebem InputStream e OutputStrem com parâmetro,
respectivamente.
O construtor padrão para a classe BufferedReader.
BufferedReader(InputStreamReader(InputStream)) - Fluxo de comunicação.
Alguns métodos importantes da classe BufferedReader.
readLine() - Retorna uma String.
read() - Retorna um único caractere.
close() - Fecha o fluxo.
O construtor padrão para a classe PrintStream.
PrintStream(OutputStream) - Fluxo de comunicação.
Alguns métodos importantes da classe PrintStream.
println() - Envia uma String.
write() - Envia um byte.
close() - Fecha o fluxo.
Bem a seguir os códigos das aplicações.
Código da aplicação cliente:
Código:
/*
* Main.java
*
* Created on 11 de Julho de 2007, 00:47
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package cliente;
//Importa pacotes para a criação de fluxos.
import java.io.*;
//Importa pacotes para a criação de sockets.
import java.net.*;
public class Main {
/** Cria uma nova instância de Main */
public Main() {
}
/**
* @param args argumentos da linha de comando
*/
public static void main(String[] args) {
try {
//Crio um socket
Socket socket = new Socket("127.0.0.1", 606);
//Crio o fluxo para o envio de dados
OutputStream saida = socket.getOutputStream();
PrintStream escrita = new PrintStream(saida);
if(args.length > 0) {
//Envio a string passada
escrita.println(args[0]);
} else {
escrita.println("Alucard");
}
//Caso não encontre o host
} catch (UnknownHostException ex) {
ex.printStackTrace();
//Caso ocorra alguma exceção na criação do fluxo
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Código:
/*
* Main.java
*
* Created on 11 de Julho de 2007, 01:45
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package servidor;
//Importa pacotes para a criação de fluxos.
import java.io.*;
//Importa pacotes para a criação de sockets.
import java.net.*;
public class Main {
private ServerSocket server;
private Socket socket;
private InputStream entrada;
private BufferedReader read;
/** Cria uma nova instânica de Main */
public Main() {
try {
//Abre uma prota para escuta (LISTENING)
server = new ServerSocket(606);
//Imprime a Mensagem "Servidor aguardando conexao."
System.out.println("Servidor aguardando conexao.");
//Aguarda e cria a uma conexão
socket = server.accept();
//Cria um fluxo de entrada
entrada = socket.getInputStream();
read = new BufferedReader(new InputStreamReader(entrada));
//Imprime o que veio na entrada
System.out.println(read.readLine());
//Fecha o fluxo o socket e o serverSocket
read.close();
socket.close();
server.close();
//Caso ocorra alguma exeção na criação do fluxo.
} catch (IOException ex) {
//Imprimi o que aconteceu de erro
ex.printStackTrace();
}
}
/**
* @param args argumentos da linha de comando
*/
public static void main(String[] args) {
//Chama o método construtor na classe
new Main();
}
}
aplicação tenta fazer uma conexão, enviando uma frase caso informe
na linha de comando a frase serí mostrada no lado servidor.
Agora como cria a interface juntamente com o programa?????