Fórum Programando com sockets em java - parte 01 #569548

09/04/2009

0

[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]
[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) {}
      }
    }
  }
}
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
Vitor Pamplona

Vitor Pamplona

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar