Programando com sockets em java - parte 01
[b]Programando com sockets em java - parte 01[/b]
[b]Leia também:[/b]
[url=http://javafree.uol.com.br/artigo/2910/Programando-em-sockets-com-java-parte-02.html]Programando em Sockets - Parte 2[/url]
[url=http://javafree.uol.com.br/artigo/3020/Programando-em-sockets-com-Java-parte-03.html]Programando em Sockets - Parte 3[/url]
Na maioria dos sistemas modernos , a comunicação entre máquinas e algumas
vezes em processo na mesma máquina, é feita através de uso de sockets.
Resumidamente, socket é o canal de comunicação através do qual uma aplicação
se comunica com outra. É o caminho mais simples e comunicação entre
aplicativos localizados em máquinas diferentes, porém pela sua simplicidade
não é bem aplicado na manipulação de tipo de dados ou de aplicações
complexas, principalmente quando o componente da aplicação está em máquina
diferente.
Existem três tipos de sockets :
[list]- Datagram Sockets : Envia o pacote sem a confirmação de que o
servidor recebeu; esta interface é implementada pelo protocolo User Datagram
Protocol (UDP).
- Stream Sockets : Envia o pacote com o cuidado de que o servidor recebe e
que a conexão está mantida; esta interface é implementada pelo protocolo
Transfer Control Protocol (TCP)
- Raw Sockets : Envia o pacote sem utilizar as camadas de transporte, como
foi visto anteriormente é usada de forma mais rústica na camada de rede (IP)
e na Internet Control Message Protocol (ICMP). Esta interface de socket não
fornece serviços ponto-a -ponto tradicional.[/list]
Espero que este singelo tutorial sobre sockets tenha acrescentado
conhecimento, e até a próxima com exemplos de Datagram Sockets.
[b]Leia também:[/b]
[url=http://javafree.uol.com.br/artigo/2910/Programando-em-sockets-com-java-parte-02.html]Programando em Sockets - Parte 2[/url]
[url=http://javafree.uol.com.br/artigo/3020/Programando-em-sockets-com-Java-parte-03.html]Programando em Sockets - Parte 3[/url]
Cleuber Batista Silva
cleuber_s@hotmail.com
[u]Esquema de comunicação através de sockets[/u]
SERVER--|--CLIENT
socket()
bind()
listen() --|-- socket()
accept() <------ connect()
read() <------ write()
write() ------> read()
Nosso exemplo será baseado no Stream Socket. Ele executará 1000 vezes o
método soma no servidor.
1. Para executar os exemplos abaixo, devemos ter instalado na máquina o JDK.
2. Compilar as aplicações
3. Executar o server.java no servidor , e o client.java conforme abaixo :
java cliente ipdoservidor porta
java client xxx.xxx.xxx.xxx 1000
Cliente
// client.java
import java.net.*;
import java.io.*;
public class client
{ public static void main(String args[] )
{
String sumString = "";
try
{ if( args.length != 2 )
{
System.out.println("Passagem de argumentos para o servidor java
<IP_host> <quantidade>");
return;
}
System.out.println("Abrindo o socket e criando o stream.");
String host = args[0];
Socket socket = new Socket (host, 250);
DataOutputStream ostream = new DataOutputStream(socket.getOutputStream());
DataInputStream istream = new DataInputStream(socket.getInputStream());
System.out.println("inicializando sum 0.");
ostream.writeUTF("set_sum");
ostream.flush();
sumString = istream.readUTF();
System.out.println("Incrementando.");
int count = new Integer(args[1]).intValue();
long startTime = System.currentTimeMillis();
for (int i = 0; i < count; i++)
{
ostream.writeUTF("incrementando");
ostream.flush();
sumString = istream.readUTF();
}
long stopTime = System.currentTimeMillis();
System.out.println ("AVG ping = " + ((stopTime - startTime) /
(float)count) + "msecs") ;
System.out.println("Contador = " + sumString);
}
catch(Exception e)
{ System.err.println(e);
}
}
}Servidor
// server.java
import java.net.*;
import java.io.*;
public class server {
public static void main ( String[] args )
{
Socket socket = null;
int sum = 0;
String sumString = "" ;
while (true)
{ try
{
ServerSocket serverSocket = new ServerSocket(250);
System.out.println("Aguardando um conexão cliente");
socket = serverSocket.accept();
DataOutputStream ostream = new
DataOutputStream(socket.getOutputStream());
DataInputStream istream = new
DataInputStream(socket.getInputStream());
while(true)
{ String myOperation = istream.readUTF();
if (myOperation.equals("Incrementando"))
sumString = String.valueOf (++sum);
else
if (myOperation.equals("set_sum"))
{
sum = 0;
sumString = String.valueOf(sum);
System.out.println("Contador = " + sumString );
}
ostream.writeUTF(sumString);
ostream.flush();
} }
catch (Exception e)
{ System.err.println("Fechando conexão") ;
if (socket != null)
try
{ socket.close();
} catch (IOException ex) {}
}
}
}
}Vitor Pamplona
Curtidas 0