You are here

Template de comunicação por Socket

O template realizado foi uma classe chamada ClientSocket, o código da classe é este:


 

import java.net.*;
import java.io.*;
 
public class ClientSocket {
    
    // Private members
    private Socket socket;
    private String error;
    private int port;
    private String host;    
    private BufferedReader entrada;
    private PrintWriter salida;    
    
    // Public methods    
    public void SetHost(String _host){
        host = _host;
    }
    
    public void SetPort(int _port){
        port = _port;
    }
    
    public String getError(){
        return error;
    }
            
     //Connect method     
    public boolean Connect() {
        System.out.println("Iniciando el socket");
        
        try{
            socket = new Socket (host, port);            
            entrada = new BufferedReader (new InputStreamReader(socket.getInputStream()));
            salida = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);            
            return true;
        }        
        catch(Exception e )
        {
            error = "Error: " + e.getMessage();
            System.out.println("Error: "+e.getMessage());
            return false;
        }
    }
    
    public void Disconnect() {
        try {
            socket.close();
        } catch (IOException ex) {
            error = "Error: " + ex.getMessage();
            System.out.println("Error: " + ex.getMessage());
            
        }
    }
    
    public boolean SendCommand(String _id,  int[] _args, int _num_arg )
    {
        String query = _id + " ";
        
        if(_id.equals("setangle"))
        {
            float angle = (float) ((double)_args[3]*3.1416/180);
            
            if(_args != null){
                for (int i = 0; i < (_num_arg-1); i++) {
                    query = query + _args[i] + " ";
                }
            }
            query = query + angle + " ";
        }
        else
        {        
            if(_args != null){
                for (int i = 0; i < _num_arg; i++) {
                    query = query + _args[i] + " ";
                }
            }
        }
        query = query.substring(0, query.length() - 1);
        
        System.out.println("Sending... " + query);
                
        try {            
            salida.println(query);            
            System.out.println(entrada.readLine());
            return true;
            
        } catch (IOException ex) {
            
            error = "Error: " + ex.getMessage();
            System.out.println("Error: "+ex.getMessage());
            return false;
        }
    }
    
    public boolean SendCommand(String _id)
    {     
        String query = _id;
        System.out.println("Sending... " + query);
                
        try {            
            salida.println(query);            
            System.out.println(entrada.readLine());
            return true;
            
        } catch (IOException ex) {
            
            error = "Error: " + ex.getMessage();
            System.out.println("Error: "+ex.getMessage());
            return false;
        }
    }    
}

 

Na classe deve-se configurar primeiro o host (host) e o número da porta de conexão (port) por meio dos métodos SetHost e SetPort.

A conexão com o servidor é realizada utilizando a função Connect(). Ela retorna um valor booleano: se a conexão foi correta retorna true se ocorreu algum erro, retorna false.

Os comandos ao servidor são enviados através da função SendCommand(...) que está sobrecarregada para permitir enviar comandos que não precisam de parâmetros.

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer