Socket em Java

7 06 2008

Vou colocar aqui alguns exemplos de socket em Java que vi hoje.

Esta é a classe cliente

package cliente;
import java.io.Serializable;
public class cliente implements Serializable{
    private static final long serialVersionUID = 100L;
    private String nome = "";
    private String endereco = "";
    private String telefone = "";
    public cliente() {}
    cliente(String nome, String endereco, String telefone){
        this.nome = nome;
        this.endereco = endereco;
        this.telefone = telefone;
    }
}

Será passado um objeto do tipo cliente do servidor para a minha aplicação, quando for fazer isso você necessita tomar alguns cuidados:

  • A classe cliente deve implementar a interface serializable;
  • A classe cliente deve estar no mesmo pacote tanto na tua aplicação local como no servidor;
  • Tanto o objeto cliente do servidor como local devem estar com o mesmo serialVersionUID, a cada compilada o java coloca um valor diferente pra este cara então você faz isso manualmente, aqui que é um teste vai funcionar mas pelamordedeus não faz isso em aplicação de verdade ok;

Agora vamos ao Servidor

package serversocket;

import java.io.*;
import java.net.*;
import cliente.*;
public class Main {
    private static Object clienteSocket;
    private static DataOutputStream out;
    private static DataInputStream in;
    private static ObjectOutputStream oos;
    public static void main(String[] args) {
        Socket clientSocket = null;
        cliente c = new cliente("Anselmo","Rua das pedras","9999-9999");
        try{
            int serverPort = 8000;
            ServerSocket listenSocket = new ServerSocket(serverPort);
            while(true){
                // esta linha é bloqueante ou seja fica aqui enquanto
                // um cliente não aceita
                clientSocket= listenSocket.accept();
                in = new DataInputStream(clientSocket.getInputStream());
                out =new DataOutputStream(clientSocket.getOutputStream());
                oos = new ObjectOutputStream(clientSocket.getOutputStream());
                int a = in.readInt();
                int b = in.readInt();
                Integer soma = a+b;
                out.writeUTF(soma.toString());
                oos.writeObject(c);
            }
        } catch(EOFException e){
            System.out.println("EOF:"+e.getMessage());
        } catch(IOException e) {
            System.out.println("IO:"+e.getMessage());
        } finally {
            try {
                if (clienteSocket!= null)
                    clientSocket.close();
            } catch (IOException e){/*close failed*/}
        }// try
    }// main
}// class

Este cara ele vai ficar esperando por conexões ele vai ler dois inteiros e vai escrever uma string depois escrever o objeto cliente.

Agora o cliente.

package clientesocket;

import cliente.cliente;
import java.net.*;
import java.io.*;
import cliente.*;

public class Main {
    public static void main (String args[]) throws IOException, ClassNotFoundException {
        Socket s = null;
        try{
            int serverPort = 8000;
            s = new Socket("127.0.0.1", serverPort);
            DataInputStream in= new DataInputStream(s.getInputStream());
            DataOutputStream out= new DataOutputStream(s.getOutputStream());
            ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
            ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
            out.writeInt(10);
            out.writeInt(20);
            String data = in.readUTF();
            cliente c = (cliente) ois.readObject();
            System.out.println("A soma de 10 + 20  =  "+data) ;
            System.out.println("nome do cliente = "+c.nome);
        }catch (UnknownHostException e){
            System.out.println("Sock:"+e.getMessage());
        }catch (EOFException e){
            System.out.println("EOF:"+e.getMessage());
        }catch (IOException e){
            System.out.println("IO:"+e.getMessage());
        } finally {
            if(s!=null)
            try {
                s.close();
            }
            catch (IOException e){
                System.out.println("close:"+e.getMessage());
            }
        }// try
    } // main
} // class

A classe cliente irá escrever dois inteiros e receber uma string e um objeto do tipo cliente.

Até + pessoal


Ações

Information

3 responses

17 08 2009
Rafael

Valew. Interesante seu exemplo funcionou corretamente.

19 08 2009
battisti

Tamos ai 🙂

27 07 2011
Jefta

Valeu cara deu certinho

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: