Ver mensagens sem resposta | Ver tópicos ativos Hoje é 20 Nov 2019, 21:33



Responder Tópico  [ 106 Mensagens ]  Ir para a página 1, 2, 3  Próximo
 [TUTORIAL] Trabalhando com Socket no Android 
Autor Mensagem
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem [TUTORIAL] Trabalhando com Socket no Android
Irei monstrar neste tutorial como podemos trabalhar com Sockets no Android.
Não existe muita diferença em relação a Sockets do Java. Iremos fazer uma aplicação como exemplo, de envio de mensagens, a partir de um cliente em Android para um Servidor Java. Sendo que também é possível implementar o Servidor no Android, ou até mesmo ele funcionar como Servidor e Cliente ao mesmo tempo, vai da criatividade de cada um.

Primeiro passo é criar um projeto no Android, vamos chamá-lo de ClienteAndroid. E adicionar as permições no AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
 


Alterando o main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:orientation="vertical"
        android:layout_weight="10" android:id="@+id/layoutMensagem">

        <TextView android:text="" android:layout_width="wrap_content"
            android:id="@+id/lbIp" android:layout_height="wrap_content">
</TextView>
        <TextView android:layout_width="fill_parent" android:text="Servidor Desconectado"
            android:layout_height="wrap_content" android:id="@+id/lbIp"
            android:gravity="center_horizontal">
</TextView>
        <TextView android:text="Ip" android:layout_width="wrap_content"
            android:gravity="left" android:id="@+id/textView1"
            android:layout_height="wrap_content">
</TextView>
        <EditText android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:text="10.0.2.2"
            android:id="@+id/edIp">
</EditText>
        <TextView android:text="Porta" android:id="@+id/textView2"
            android:layout_width="wrap_content" android:layout_height="wrap_content">
</TextView>
        <EditText android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:text="1234" android:id="@+id/edPorta">
</EditText>
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
        android:id="@+id/linearLayout2" android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button android:layout_width="wrap_content" android:text=">>Conectar"
            android:id="@+id/btnConectar" android:layout_height="wrap_content"
            android:layout_weight="1"></Button>
    </LinearLayout>
</LinearLayout>


Foram adicionados ao layout dois EditText, para informar o Ip e a porta do servidor que o Android vai se conectar para enviar as mensagens e também um botão onde iniciar a conexão com esse servidor.
Agora vamos criar outro layout, com o nome de form_msg.xml
Essa tela irá disponibilizar um EditText pra envio de mensangem ao servidor, além, de um botão para desconectar.

Form_msg.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:orientation="vertical"
        android:layout_weight="10" android:id="@+id/layoutMensagem">

        <TextView android:layout_width="fill_parent" android:text=""
            android:layout_height="wrap_content" android:id="@+id/lbIp">
</TextView>
        <TextView android:layout_width="fill_parent" android:text="Mensagem"
            android:layout_height="wrap_content" android:id="@+id/lbTitulo">
</TextView>
        <EditText android:layout_width="fill_parent" android:text=""
            android:layout_height="wrap_content" android:id="@+id/edMensagem">
</EditText>
        <Button android:text=">>Enviar" android:id="@+id/btnEnviar"
            android:layout_height="wrap_content" android:layout_width="fill_parent"></Button>
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
        android:orientation="
vertical" android:id="@+id/linearLayout2"
        android:layout_height="
wrap_content">
        <TextView android:layout_width="fill_parent" android:text="Servidor->
Conectado"
            android:id="@+id/lbStatus" android:layout_height="wrap_content"></TextView>
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
        android:id="@+id/linearLayout2" android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button android:layout_width="wrap_content" android:text=">>Desconectar"
            android:id="@+id/btnDesconectar" android:layout_height="wrap_content"
            android:layout_weight="1"></Button>
    </LinearLayout>
</LinearLayout>


Até aqui nenhum segredo, só construímos os layouts necessários para o funcionamento da nossa aplicação.
Vamos ver agora a classe ConnectionSocket.java, que irá, de fato, conectar com nosso servidor.

ConnectionSocket.java

public class ConnectionSocket {

    private static ConnectionSocket connection;
    private int porta;
    private String host;
    private Socket socket;
    private Sender sender;
    public static final int CONNECTED = 1;
    public static final int ERROR = 2;
    public static final int SENDING_MESSAGE = 3;
    public static final int DISCONNECTED = 4;
    private Message msg;
    private DataOutputStream out;
    private Handler handler; // Handle para notificações na tela

    private ConnectionSocket(String host, String porta) {
        this.host = host;
        this.porta = Integer.parseInt(porta);
    }

    // Método que cria Objecto ConnectionSocket
    public static ConnectionSocket createConnection(String host, String porta) {
        connection = new ConnectionSocket(host, porta);
        return connection;
    }

    // Retorna conexão atual
    public static ConnectionSocket getCurentConnection() {
        return connection;
    }

    // Conecta com o Servidor
    public void connect() throws Exception {
        this.socket = new Socket(host, porta);
        out = new DataOutputStream(socket.getOutputStream());
    }

    // Inicia Thread para envio de mensagens
    public void startSender(Handler handler) {
        sender = new Sender(out, handler);
        new Thread(sender).start();
        this.handler = handler;
    }

    // Método set mensagem para envio
    public void senMessage(String mensagem) {
        sender.setMessage(mensagem);
    }

    // Método para disconectar do Servidor
    public void disconnect() throws Exception {
        sender.disconnect();
        socket.close();
        if (handler != null) {
            msg = new Message();
            msg.arg1 = ConnectionSocket.DISCONNECTED;
            handler.sendMessage(msg);
        }

    }
}
 


Essa classe funciona como uma fábrica de conexões, por este motivo seu construtor é privado, assim sua instanciação direta não é permitida.

Agora vamos ver a classe Sender.java, que será responsável por enviar as mensagens ao Servidor, lembrando que eu estou simplemente enviando a mensagem, e não me preocupando obter uma resposta do Servidor.

Sender.java

class Sender implements Runnable {

    private DataOutputStream out;
    private boolean running = true;
    private Handler handler;
    private Message msg;
    private String sendMessage;

    public Sender(DataOutputStream out, Handler handler) {
        this.out = out;
        this.handler = handler;
    }

    @Override
    public void run() {
        while (running) {// Enquanto estiver executando

            try {
                if (sendMessage != null) { // Se existir uma mensagem para
                                            // enviar
                    msg = new Message();
                    msg.arg1 = ConnectionSocket.SENDING_MESSAGE;
                    handler.sendMessage(msg); // Notifica Handler

                    out.writeUTF(sendMessage); // Escreve mensagem
                    out.flush();
                    sendMessage = null; // Seta nulo na mensagem
                }

            } catch (IOException e) {
                e.printStackTrace();
                msg = new Message();
                msg.arg1 = ConnectionSocket.ERROR;
                msg.obj = e.getMessage();
                handler.sendMessage(msg);
                running = false;
            }

        }
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    public boolean isRunning() {
        return running;
    }

    public void setRunning(boolean running) {
        this.running = running;
    }

    public void stop() {
        running = false;
    }

    public void setMessage(String message) {
        this.sendMessage = message;

    }

    public void disconnect() throws Exception {
        msg = new Message();
        msg.arg1 = ConnectionSocket.DISCONNECTED;
        handler.sendMessage(msg); // Notifica Handler
        running = false;
        out.close();
    }

}
 

Primeiramente a classe implementa Runnable, ou seja, será uma Thread, e só será finalizado quando o atributo runningse tornar false.

Agora vamos as Activities.

Na Activity inicial vamos implementar OnClickClistener, para interceptar o clique no botão de conectar.

ClienteAndroid.java

    @Override
    public void onClick(View view) {
        if (view == btnConectar) { // Clicou no botão Conectar

            try {
                // Tenta iniciar uma conexão com o Servidor de Socket
                ConnectionSocket connection = ConnectionSocket
                        .createConnection(edIp.getText().toString(), edPorta
                                .getText().toString());
                connection.connect();
                // Inicia tela para envio de mensagens
                startActivity(new Intent(this, MensagemAndroid.class));
            } catch (Exception e) {
                // Mostra erro na tela
                Toast.makeText(this,
                        "Não foi possível conectar->" + e.getMessage(),
                        Toast.LENGTH_LONG).show();
            }

        }

    }
 


Ao clicar no botão conectar, o método createConnection da classe Connectation socket vai tentar conectar ao servidor, se não ocorrer nenhum Exception a tela de envio de mensagens será aberta.
A classe Activity responsável pela tela de envio é MensagemAndroid.java.

MensagemAndroid.java

public class MensagemAndroid extends Activity implements OnClickListener {
    private TextView lbStatus;
    private EditText edMensagem;
    private Button btnDesconectar;
    private Button btnEnviar;
    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            // Verifica mensagem do Handler e mostra na tela
            synchronized (msg) {
                switch (msg.arg1) {
                case ConnectionSocket.CONNECTED:
                    lbStatus.setText("Conectado");
                    break;
                case ConnectionSocket.SENDING_MESSAGE:
                    lbStatus.setText("Enviou Mensagem");
                    edMensagem.setText("");
                    break;
                case ConnectionSocket.ERROR:
                    lbStatus.setText("Ocorreu um erro->" + msg.obj);
                    break;
                case ConnectionSocket.DISCONNECTED:
                    lbStatus.setText("Servidor->Desconectou");
                    break;

                }
            }
        };

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.form_msg);

        lbStatus = (TextView) findViewById(R.id.lbStatus);
        edMensagem = (EditText) findViewById(R.id.edMensagem);

        btnEnviar = (Button) findViewById(R.id.btnEnviar);
        btnEnviar.setOnClickListener(this);
        btnDesconectar = (Button) findViewById(R.id.btnDesconectar);
        btnDesconectar.setOnClickListener(this);

        try {
            // Recupera Conexão atual
            ConnectionSocket.getCurentConnection().startSender(handler);
        } catch (Exception e) {

            Toast
                    .makeText(
                            this,
                            "Não foi possível iniciar o Serviço para envio de Mensagens.",
                            Toast.LENGTH_LONG).show();
            finish();
        }
    }

    @Override
    public void onClick(View v) {
        // clicou no botão desconectar
        if (v == btnDesconectar) {
            try {
                ConnectionSocket.getCurentConnection().disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
            // Clicou no botão enviar mensagem
        } else if (v == btnEnviar) {
            ConnectionSocket.getCurentConnection().senMessage(
                    edMensagem.getText().toString());
        }
    }
 


Logo no OnCreate da Activity método getCurrentConnection é chamado, ele retorna a conexão atual do Socket. Apos isso, é invocado o método startSender, passando como arguemento uma instância de Sender.java.

Aqui trabalhamos com Handler, essa do Android responsável por agendar uma mensagem que poderá modificar o estado de uma tela da nossa aplicação, a classe Handler é muito utilizada vale a pena pesquisar mais um pouco sobre ela.

Até aqui tudo bem, agora vamos fazer o nosso Servidor.
Que é bem simples. Vamos cirar um projeto Java, chamado de ServidorJava.
Não me preocupei em trar excessões, como parar etc. E ele também só recebe uma conexão por fez, ou seja é Single-thread, mas nada impede de altar sua implementação para Multi-thread.

Vamos criar a classe Servidor.java

Servidor.java

public class Servidor {

    private static boolean executando = true;
    private static String mensagem;
    private static final int PORTA = 1234;

    public static void main(String[] args) {

        try {
            ServerSocket server = new ServerSocket(1234);
            InetAddress addr = InetAddress.getLocalHost();
            System.out.println("----------- SERVIDOR CONECTADO "
                    + addr.getHostAddress() + " PORTA " + PORTA
                    + " -----------");
            System.out.println("Esperando Conexões.");

            Socket socket = server.accept();

            System.out.println("Sevidor-> Conectou Ip "
                    + socket.getInetAddress().getHostAddress());
            DataInputStream in = new DataInputStream(socket.getInputStream());

            try {
                while (executando) {
                    mensagem = in.readUTF();
                    System.out.println("Servidor-> Recebeu Mensagem: "
                            + mensagem);
                }
                System.out.println("Servidor-> Finalizado.");

                in.close();
                socket.close();
                server.close();
            } catch (Exception e) {
                System.err.println("Servidor-> Erro: " + e.getMessage());
                executando = false;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
 


Pronto, agora podemos testar nossa aplicação.
Primeiro temos que iniciar nosso Servidor Java.
Imagem

Agora excutando a aplicação irá aparecer.
Imagem

Por padrão o EditText já traz o ip do Computador local, sendo que 120.0.0.1 é o Ip do Emulator e a porta 1234.

Ao clicar no botão Conectar o Android Conectar no Servidor a abre a tela para envio das mensagens.
Imagem

Quando escrevo uma mensagem, por exemplo "HELLO SOCKET" e clico no botão enviar, o Servidor recebe ela e escreve no console do Eclipse.
Imagem

Vou deixar aqui também o código fonte para download, o código está devidamento comentado.

Socket é de grande utilidade na comunicação remota, pode ser usado não só para envio de Strings, como no exemplo, mas para envio de binários (como arquivos) tanto do Android para um Servidor remoto quanto do Servidor para o Android, ou até mesmo entre dois dispositivos Android.

Quem quizer ver mais sobre sockets, em Java, é só pesquisar na Internet existem inúmeros tutoriais.

Valeu, até.

_________________
http://www.turim.wordpress.com/

@turim_thiago


13 Jun 2011, 22:01
Perfil WWW
What is Android?
What is Android?

Data de registro: 02 Jul 2011, 10:18
Mensagens: 4
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Olá, desde já agradeço pela generosidade em disponibilizar um tutorial tão interessante como este.

Ao seguir os passos descritos consegui acertar quase todos os códigos para que funcionassem corretamente. Infelizmente não consegui implementar o arquivo ClienteAndroid... ele não reconhece o botão btnConectar


05 Jul 2011, 12:16
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Carlos R V Medeiros escreveu:
Olá, desde já agradeço pela generosidade em disponibilizar um tutorial tão interessante como este.

Ao seguir os passos descritos consegui acertar quase todos os códigos para que funcionassem corretamente. Infelizmente não consegui implementar o arquivo ClienteAndroid... ele não reconhece o botão btnConectar



Faz o download do fonte que tem tudo lá!!!

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


06 Jul 2011, 01:13
Perfil WWW
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Esse erro aparece na compilaçào ou em tempo de execuçao?

Qual erro é ?

_________________
http://www.turim.wordpress.com/

@turim_thiago


06 Jul 2011, 12:31
Perfil WWW
What is Android?
What is Android?

Data de registro: 02 Jul 2011, 10:18
Mensagens: 4
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
O erro aparece no momento de compilar. Quando vou compilar aparece a mensagem:
The method onClick(View) of type ClientAndroidActivity must override or implement a supertype method
Se eu remover a linha @Override, então aparece outro erro:
btnConectar cannot be resolved to a variable


18 Jul 2011, 11:19
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Cola aí a classe que está dando erro.

_________________
http://www.turim.wordpress.com/

@turim_thiago


20 Jul 2011, 10:33
Perfil WWW
What is a Activity?
What is a Activity?

Data de registro: 04 Fev 2011, 02:41
Mensagens: 10
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
@turim

Obrigado por compartilhar seu conhecimento cara, estou só esperando me Galaxy 550 chegar, para que eu possa começar a treinar. Abraço /ss


07 Ago 2011, 14:47
Perfil
What is Android?
What is Android?

Data de registro: 06 Jan 2011, 21:17
Mensagens: 8
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Otimo tutorial!!!
Mas como faria para que o server envia-se uma mensagem para o client android???


03 Set 2011, 22:51
Perfil
What is Android?
What is Android?

Data de registro: 09 Set 2011, 10:51
Mensagens: 2
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Consegui fazer funcionar, mas tenho uma duvida, alguem tem alguma aplicação utilizando socket 100%? ele dá uma travada as vezes. e nao sei se utilizo o json ou socket na minha aplicação.
tenho que consultar pelo celular e obter resposta do servidor, ou seja, o servidor tem que enviar e receber dados e o cliente também.
o que acham melhor ?


09 Set 2011, 12:18
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Ricardo,

Não entendo o que o JSON tem a ver com o socket!!!

Eu tenho uma app com 2 sockets e não trava nada!! E a mesma tbm usa um WS com JSON!!

A escolha depende de vc e do que vc está fazendo!!

Eu uso socket em uma parte pq preciso de respostas rápidas, por isso criei o meu protocolo e trabalho com socket.

Para informações não tão críticas, utilizo o WS com JSON, que fica mais fácil de trabalhar.

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


09 Set 2011, 14:09
Perfil WWW
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Olá Ricardo,


Teria que ver onde está "travando" sua aplicação Socket. Lembrando que Socket é um objeto "blocante", ou seja, ele para o processamento no método accept, até que algum cliente conecte nele.
Quanto ao utilizar JSON. Que nada mais que um tipo de protocolo geralmente utilizada em requsições Http.
Conexão via Socket, você abre um canal e tem uma comunicação bidirecional. Já http: é por requisições e resposta. Você requisita e obtem a resposta... ou não.
Você pode usar JSON em sockets, se for para facilitar você transmitir objetos. Dá para usar serialização também, xml... ou até mesmo criar um tipo de protocolo.

Exemplo:

Cliente Socket/Http Servidor
objeto<----> JSON<------------>objeto

_________________
http://www.turim.wordpress.com/

@turim_thiago


09 Set 2011, 15:44
Perfil WWW
What is Android?
What is Android?

Data de registro: 14 Set 2011, 14:25
Mensagens: 5
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Mto bom tutorial! Me ajudou mto a entender o funcionamento de comunicacao em ambiente Android.
Meu projeto se baseia em comunicacao, porem ao inves de mandar uma mensagem, irei mandar uma figura. Alguem sabe como funciona a transferencia de imagens entre um Android e um Desktop Java usando esse exemplo de socket?

Desde ja Agradeço!


14 Set 2011, 14:29
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Simples!! Ao invés de enviar uma string, envie um File!!

Eu tenho um exemplo, mas vai ficar muito grande pra postar aqui e se postar só um pedaço vc não vai entender.

Se quiser, manda MP com o seu e-mail que eu te mando.

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


14 Set 2011, 18:58
Perfil WWW
What is a Activity?
What is a Activity?

Data de registro: 23 Nov 2011, 03:31
Mensagens: 18
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Muito bom esse tutorial.

Estou estudando Android, e aprendendo muito com vocês aquí no forum.

Fiz esse tutorial, porém ao clicar no Botão Conectar, ele não muda de tela.
Rodei o Servidore.java no eclipse , e fica, esperando conexão.
Logo em seguida, rodei a aplicação do android.
Tentei com :
10.0.2.2 Porta 1234
120.0.0.1 Porta 1234
192.168.1.101 Porta 1234

E nenhuma conecta na tela para enviar a mensagem. O que pode estar errado ?

Outra coisa, se eu quisesse por exemplo salvar essa mensagem em uma tabela em um banco de dados no servidor, como faria ?

Grato,

Fabio Baroni


26 Nov 2011, 02:13
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
baronfa1

Está aparecendo alguma Exceção ? Se estiver rodando pelo Emulador, o IP pardão já está ni EditText.

Qto a salvar no banco de dados, você teria que criar uma conexão com o SQLite, gerar um insert na tabela, normal.

_________________
http://www.turim.wordpress.com/

@turim_thiago


26 Nov 2011, 14:26
Perfil WWW
What is Android?
What is Android?

Data de registro: 28 Nov 2011, 00:49
Mensagens: 1
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Olá, achei muito bom esse tutorial, apanhei muito pra entender, pois precisava de varias janelas (e ainda estou apanhando rsrs) mas enfim, já consegui acessos simultaneos, porém o servidor não receonhece q recebeu nova conexão, porém recebe as msgs..
gostaria de saber como eu deixo o servidor sempre ativo, pois ele pára qdo eu desconecto o celular, queria q ele ficasse esperando outra conexão.. como eu faria isso?
outra duvida: como eu mando uma msg do servidor pro cliente? já tentei de varias formas mas ainda não deu certo.. agradeço desde já a atenção.. abçs


28 Nov 2011, 00:51
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Para deixar ele ativo deve-se alterar o while do Servidor.


                while (executando) {
                    mensagem = in.readUTF();
                    System.out.println("Servidor-> Recebeu Mensagem: "
                            + mensagem);
                }
                System.out.println("Servidor-> Finalizado.");

                in.close();
                socket.close();
                server.close(); //Aqui está fechando o Socket do Servidor
 


Teria que fazer algo como:

                while (true) {
                    mensagem = in.readUTF();
                    System.out.println("Servidor-> Recebeu Mensagem: "
                            + mensagem);
                }
                System.out.println("Servidor-> Finalizado.");

                in.close();
                socket.close();
 


Já para enviar um dados do dispositivo para o Servidor, teria que acrescentar:

            DataOutputStream out = new DataOutputStream(socket.getOutputStream()); //Cria Fluxo para enviar dados

            try {
                while (executando) {
                    mensagem = in.readUTF();
                    System.out.println("Servidor-> Recebeu Mensagem: "
                            + mensagem);
                }
                System.out.println("Servidor-> Finalizado.");
                out.write("OK".getBytes()); //Envia OK para servidor
                out.flush(); //Flush no Fluxo de bytes
                out.close(); //Close
               
                in.close();
                socket.close();
            //  server.close();
            } catch (Exception e) {
                System.err.println("Servidor-> Erro: " + e.getMessage());
                executando = false;
            }
 


Lembrando que o servidor é single-thread, ou seja, só conecta um cliente de cada vez.

Espero que ajude.

_________________
http://www.turim.wordpress.com/

@turim_thiago


28 Nov 2011, 14:32
Perfil WWW
What is Android?
What is Android?

Data de registro: 12 Jan 2012, 05:25
Mensagens: 1
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Parabéns pelo tutorial! Criei uma conta neste portal por sua causa heheheh
Continue assim.. espero estar compartilhando informações quando ganhar experiencia :D
Obrigado ^^


12 Jan 2012, 05:27
Perfil
What is Android?
What is Android?

Data de registro: 05 Dez 2011, 21:28
Mensagens: 3
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Gostei muito do tutorial! Me ajudou a entender bastante como funciona socket em Android.

Mas eu gostaria de saber como eu poderia deixar Multi-thread e também implementar que o servidor envie mensagem ao cliente... Andei pesquisando, mas não encontrei algo que me ajudasse! Sou novo...


23 Jan 2012, 19:25
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Olá Victor, recebi seu e-mail, e lhe respondi ok. Depois coloco aqui no tópico, para compartilhar com todos.

_________________
http://www.turim.wordpress.com/

@turim_thiago


24 Jan 2012, 09:52
Perfil WWW
What is Android?
What is Android?

Data de registro: 16 Dez 2011, 16:05
Mensagens: 7
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Boa tarde galera!

Escrevi este código e está rodando 100%.

Agora a questão é, tem como usar essa mesmo algorítimo ou ideia para baixar dados do servidor e jogar dentro de uma pasta no android.

Vlw.


02 Fev 2012, 12:58
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Quando você quer dizer com dados ? Arquivos ?

_________________
http://www.turim.wordpress.com/

@turim_thiago


02 Fev 2012, 15:55
Perfil WWW
What is Android?
What is Android?

Data de registro: 16 Dez 2011, 16:05
Mensagens: 7
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Sim, qualquer tipo de arquivo que estiver no servidor. Fazer download dele e joga em uma pasta no dispositivo móvel.


03 Fev 2012, 09:06
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Então, é o sentido inverso do Tutorial. É possível fazer sim.

No caso, o servidor envia uma String como resposta ao Android.

Para enviar um arquivo, basta passar um byte[].

E no dispositvo converter esse byte em um arquivo.

_________________
http://www.turim.wordpress.com/

@turim_thiago


03 Fev 2012, 10:41
Perfil WWW
What is Android?
What is Android?

Data de registro: 06 Mar 2012, 18:33
Mensagens: 2
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Ola turim, usando seu tutorial construi um poc fazendo acesso ao banco de dados e funciona perfeitamente, gostaria de saber se há alguma maneira de detectar uma falha, tipo envio um insert para o servidor fazer no banco, o servidor faz o insert mas não recebo a confirmação do insert?
Desde já agraço a atenção.


06 Mar 2012, 19:22
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Luciano0102 escreveu:
Ola turim, usando seu tutorial construi um poc fazendo acesso ao banco de dados e funciona perfeitamente, gostaria de saber se há alguma maneira de detectar uma falha, tipo envio um insert para o servidor fazer no banco, o servidor faz o insert mas não recebo a confirmação do insert?
Desde já agraço a atenção.


Luciano0102,

Isso já vai do negócio que você esta usando. A classe Socket mesmo nào trata isso. O que você pode fazer é definir um protocolo, se conseguir fazer o insert, devolve um "OK", caso contrário, devolve o erro. Seria uma opção.

_________________
http://www.turim.wordpress.com/

@turim_thiago


07 Mar 2012, 10:20
Perfil WWW
What is Android?
What is Android?

Data de registro: 06 Mar 2012, 18:33
Mensagens: 2
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
O problema é exatamtente esse: não receber a confirmação e nem o erro
Estou fazendo assim a requisição do insert ao servidor:
socket = new Socket(SERVIDOR_IP, SERVIDOR_PORTA);
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
out.writeUTF("INSERT");
out.writeUTF("PARAMETRO");
out.flush();

String res = in.readUTF().toString().trim(); //AQUI ESTÁ O PROBLEMA NEM SEMPRE RECEBO A CONFIRMAÇÃO MESMO ELA TENDO SIDO EFETIVADA COM SUCESSO

Para um sistema em produção isso seria drástico.
Agradeço mais uma vez pela atenção.


08 Mar 2012, 12:46
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Nesse tutorial não foi implementado a parte do Servido renviar uma menasgem ao Cliente.

Isso foi abordado em outro tutorial, Trabalhando com Socket no Android II - Arquivo.

Espero que ajude.

_________________
http://www.turim.wordpress.com/

@turim_thiago


08 Mar 2012, 13:32
Perfil WWW
What is Android?
What is Android?

Data de registro: 10 Mar 2012, 04:01
Mensagens: 3
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Olá! Primeiramente obrigado por feito esse tutorial, ajudando todos na comunidade. Estou começando a estudar socket agora, então ainda

é um pouco confuso pra mim.
Então, estou trabalhando com um módulo arduino ethernet shild, ele cria um servidor e abre uma porta na rede local. Eu gostaria de enviar e receber informações através do android para ele. Para isso eu preciso criar um cliente e servidor no android? Ou eu posso enviar e receber informações pela rede sendo, apenas cliente?

Até mais!!Desde jah agradeço cara!!


13 Mar 2012, 03:25
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Não necessariamente. Socket é um meio de comunicação biderecional, você envia e receber informações, sendo cliente ou servidor.

No tutorial [TUTORIAL] Trabalhando com Socket no Android II - Arquivo, tem uma parte onde o servidor envia um "OK", para o cliente.

valeu.

_________________
http://www.turim.wordpress.com/

@turim_thiago


13 Mar 2012, 10:09
Perfil WWW
What is Android?
What is Android?

Data de registro: 10 Mar 2012, 04:01
Mensagens: 3
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Obrigado pela resposta Turim! Este tutorial tem me ajudado muito.
Estou estudando cada classe do código, só que ainda não encontrei o método que recebe o dado do servidor. Também abri o seu projeto no eclipse e deu um erro no método OnClick(), o eclipse sugere que eu utilize o OnClickListener() ....
Até mais Turim! Novamente brigado!!


13 Mar 2012, 22:16
Perfil
Application Life Cycle
Application Life Cycle
Avatar de usuário

Data de registro: 31 Mai 2009, 12:37
Mensagens: 280
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
UesleiEngineer escreveu:
Obrigado pela resposta Turim! Este tutorial tem me ajudado muito.
Estou estudando cada classe do código, só que ainda não encontrei o método que recebe o dado do servidor. Também abri o seu projeto no eclipse e deu um erro no método OnClick(), o eclipse sugere que eu utilize o OnClickListener() ....
Até mais Turim! Novamente brigado!!


Eu me enganei, o servidor não "responde" nada.

Para funciona o envio de Mesnagem do Servidor para o Cliente deve-se incluir o seguinte código no Servidor.java.

(...)

DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.write("OK".getBytes()); //Aqui envia a mensagem ao cliente

out.flush();
out.close();

(...)
 


No Cliente você pode criar uma classe responsável de recebimento das mensagens, por exemplo: Receiver.java.
Seria mais ou menos assim:

class Receiver implements Runnable {

    private DataInputStream in;
(...)

    public Sender(DataInputStream in, Handler handler) {
        this.out = out;
        this.handler = handler;
    }

(...)

@Override
public void run() {
//Dentro do Loop da Thread
in.readUTF()
(...)
}
 


Espero que ajude.

Até mais.

_________________
http://www.turim.wordpress.com/

@turim_thiago


14 Mar 2012, 00:30
Perfil WWW
Application Life Cycle
Application Life Cycle

Data de registro: 29 Mar 2012, 11:00
Mensagens: 218
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
turim gostaria de saber como eu poderia deixar Multi-thread e também implementar que o servidor envie mensagem ao cliente poderia me ajuda ?


11 Abr 2012, 13:39
Perfil
Application Life Cycle
Application Life Cycle

Data de registro: 29 Mar 2012, 11:00
Mensagens: 218
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
antunes escreveu:
Simples!! Ao invés de enviar uma string, envie um File!!

Eu tenho um exemplo, mas vai ficar muito grande pra postar aqui e se postar só um pedaço vc não vai entender.

Se quiser, manda MP com o seu e-mail que eu te mando.

Abraços!


Não sei se estou mandando pela segunda veiz é que ocorreu erro na pagina
então você teria algum exemplo nesse estilo : eu crio um arquivo txt dentro do programa e adiciono uma informção "string" dentro dele e envio o arquivo txt para o servidor.
será que poderia me ajudar?
meu email é : goncalves.essystem@hotmail.com


19 Abr 2012, 12:28
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Goncalves1 escreveu:
antunes escreveu:
Simples!! Ao invés de enviar uma string, envie um File!!

Eu tenho um exemplo, mas vai ficar muito grande pra postar aqui e se postar só um pedaço vc não vai entender.

Se quiser, manda MP com o seu e-mail que eu te mando.

Abraços!


Não sei se estou mandando pela segunda veiz é que ocorreu erro na pagina
então você teria algum exemplo nesse estilo : eu crio um arquivo txt dentro do programa e adiciono uma informção "string" dentro dele e envio o arquivo txt para o servidor.
será que poderia me ajudar?
meu email é : goncalves.essystem@hotmail.com


Rapaz,

O turim já fez um tutorial de envio de arquivo com socket:

viewtopic.php?f=7&t=13446

Com um pesquisa rápida no google achei esses links para socket com arquivo e escrita em txt:

http://www.rgagnon.com/javadetails/java-0542.html
http://www.roseindia.net/java/beginners ... file.shtml

A diferença é que o meu servidor é multi-thread, ou seja, a cada conexão de um cliente, uma thread é aberta e a comunicação é tratada independentemente, assim vc consegue que vários clientes se conectem no seu servidor, mas basicamente pra fazer o que vc precisa, é isso que estão nesses links!

O meu código não escreve no arquivo e eu nem sei onde está, vou ter que procurar! Foi algo que fiz para a faculdade!

Qualquer dúvida abra um tópico para tratar esse assunto!

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


19 Abr 2012, 13:57
Perfil WWW
What is DDMS?
What is DDMS?

Data de registro: 23 Abr 2012, 01:23
Mensagens: 35
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Quando clico em conectar da "Não foi possivel conectar ->Permission denied".
E a minha aplicação servidor ta rodando certinho !


23 Abr 2012, 02:52
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Vc colocou as permissões no manifest??

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


23 Abr 2012, 04:15
Perfil WWW
What is DDMS?
What is DDMS?

Data de registro: 23 Abr 2012, 01:23
Mensagens: 35
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Acho que sim! Veja se esta certo =D

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pacote.grafico"
    android:versionCode="1"
    android:versionName="1.0" >


    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        <activity
            android:name=".AndroidClienteActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <uses-permission android:name="android.permission.INTERNET"></uses-permission>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    </application>

</manifest>


23 Abr 2012, 15:25
Perfil
Application Life Cycle
Application Life Cycle

Data de registro: 29 Mar 2012, 11:00
Mensagens: 218
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Olá antunes, eu vi os tutoriais do Turim mais não sei como implementar
oque eu desejo, sou novato na area não sei muito sobre socket queria uma ajuda, abri um topico
http://www.portalandroid.org/comunidade/viewtopic.php?f=2&t=19051&p=136919#p136919
se puder me ajudar, e também tenho que deixar meu servidor multi-thread, se poder me ajudar
com algum exemplo
Agradeço a ajuda !


23 Abr 2012, 15:27
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
malinosqui escreveu:
Acho que sim! Veja se esta certo =D

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pacote.grafico"
    android:versionCode="1"
    android:versionName="1.0" >


    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        <activity
            android:name=".AndroidClienteActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <uses-permission android:name="android.permission.INTERNET"></uses-permission>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    </application>

</manifest>


As permissões devem ficar fora da tag "application" e de preferência antes dela!!

Assim:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="pacote.grafico"
    android:versionCode="1"
    android:versionName="1.0" >


    <uses-sdk android:minSdkVersion="8" />

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        <activity
            android:name=".AndroidClienteActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
 


Sugiro que vc dê uma lida sobre manifest na documentação oficial!!

http://developer.android.com/guide/topi ... intro.html

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


23 Abr 2012, 23:30
Perfil WWW
What is DDMS?
What is DDMS?

Data de registro: 23 Abr 2012, 01:23
Mensagens: 35
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
@antunes
A sim , obrigado pela ajuda ! Eu li um pouquinho sobre manifest agora.
Aquele erro foi corrigido porem esta dando outro erro,agora aparece !"Não foi possivel iniciar o serviço de envio de mensagens!" só que no log da aplicação servidor aparece "Conectou ip 127.0.0.1".
Se voce puder me ajudar ,estarei grato pois sou iniciante em android , e meu TCC é sobre isso ! =D
Abraços


24 Abr 2012, 16:57
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Coloque o comando "e.printStackTrace();" no catch dessa parte do código e veja o erro que vai aparecer no logcat!!

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


24 Abr 2012, 18:15
Perfil WWW
What is DDMS?
What is DDMS?

Data de registro: 23 Abr 2012, 01:23
Mensagens: 35
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Amigo o meu logcat não esta apresentando erro algum , e eu coloquei o método que voce mandou aqui :
try {
            // Recupera Conexão atual
            ConnectionSocket.getCurentConnection().startSender(handler);
        } catch (Exception e) {

            Toast
                    .makeText(
                            this,
                            "Não foi possível iniciar o Serviço para envio de Mensagens.",
                            Toast.LENGTH_LONG).show();
                            e.printStackTrace();
            finish();
        }
    }

Desculpa o incomodo cara!


24 Abr 2012, 18:52
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Coloca entes do toast!!

Se cai no catch, tem que aparecer no logcat!

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


24 Abr 2012, 20:25
Perfil WWW
What is DDMS?
What is DDMS?

Data de registro: 23 Abr 2012, 01:23
Mensagens: 35
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Coloquei em cima do Toast ,
Ai o que esta aparecendo no meu logcat em amarelo :

    04-25 01:08:15.676: W/System.err(282): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    04-25 01:08:15.676: W/System.err(282): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    04-25 01:08:15.676: W/System.err(282): at android.os.Handler.dispatchMessage(Handler.java:99)
    04-25 01:08:15.690: W/System.err(282): at android.os.Looper.loop(Looper.java:123)
    04-25 01:08:15.690: W/System.err(282): at android.app.ActivityThread.main(ActivityThread.java:4627)
    04-25 01:08:15.696: W/System.err(282): at java.lang.reflect.Method.invokeNative(Native Method)
    04-25 01:08:15.696: W/System.err(282): at java.lang.reflect.Method.invoke(Method.java:521)
    04-25 01:08:15.696: W/System.err(282): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    04-25 01:08:15.696: W/System.err(282): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    04-25 01:08:15.710: W/System.err(282): at dalvik.system.NativeStart.main(Native Method)
    04-25 01:08:15.726: W/System.err(282): java.lang.ClassCastException: pacote.grafico.Sender
    04-25 01:08:15.726: W/System.err(282): at pacote.grafico.ConnectionSocket.startSender(ConnectionSocket.java:51)
    04-25 01:08:15.726: W/System.err(282): at pacote.grafico.MensagemAndroid.onCreate(MensagemAndroid.java:60)
    04-25 01:08:15.726: W/System.err(282): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    04-25 01:08:15.726: W/System.err(282): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    04-25 01:08:15.726: W/System.err(282): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    04-25 01:08:15.726: W/System.err(282): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    04-25 01:08:15.726: W/System.err(282): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    04-25 01:08:15.739: W/System.err(282): at android.os.Handler.dispatchMessage(Handler.java:99)
    04-25 01:08:15.739: W/System.err(282): at android.os.Looper.loop(Looper.java:123)
    04-25 01:08:15.739: W/System.err(282): at android.app.ActivityThread.main(ActivityThread.java:4627)
    04-25 01:08:15.746: W/System.err(282): at java.lang.reflect.Method.invokeNative(Native Method)
    04-25 01:08:15.746: W/System.err(282): at java.lang.reflect.Method.invoke(Method.java:521)
    04-25 01:08:15.757: W/System.err(282): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    04-25 01:08:15.757: W/System.err(282): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    04-25 01:08:15.766: W/System.err(282): at dalvik.system.NativeStart.main(Native Method)
    04-25 01:08:15.946: W/InputManagerService(59): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44ef6458


25 Abr 2012, 00:12
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Tá aí, problema de "ClassCastException" na linha 51 da classe "ConnectionSocket"!!

04-25 01:08:15.726: W/System.err(282): at pacote.grafico.ConnectionSocket.startSender(ConnectionSocket.java:51)

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


25 Abr 2012, 00:23
Perfil WWW
What is DDMS?
What is DDMS?

Data de registro: 23 Abr 2012, 01:23
Mensagens: 35
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
O meu método esta assim :
public void startSender(Handler handler) {
            sender = new Sender(out, handler);
            new Thread((Runnable) sender).start();
            this.handler = handler;
        }


Sendo que o do código fonte esta assim :
public void startSender(Handler handler) {
            sender = new Sender(out, handler);
            new Thread(sender).start();
            this.handler = handler;
        }


Se eu deixar como esta no código fonte da erro , pede para eu fazer um casting para Runnable como fiz , remover o argumento sender de dentro do Thread , trocar a variavel para o tipo sender , ou "Let sender implement Runnable".

EDIT: Passou para a próxima tela , só que o botão não esta enviando a mensagem ! Muito obrigado pela ajuda !
Abraços


25 Abr 2012, 00:36
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Vc teve que fazer o cast pq o sua classe Sender não deve ser um Runnable!!

Vc não deve ter feito isso nela:

class Sender implements Runnable


De inicio, tente fazer exatamente como no tutorial, depois mude como quiser, tendo certeza do que está fazendo!!

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


25 Abr 2012, 02:50
Perfil WWW
What is DDMS?
What is DDMS?

Data de registro: 23 Abr 2012, 01:23
Mensagens: 35
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Agora deu certo ! Ta funcionando certinho , obrigado pela ajuda =D .
Só mais uma pergunta , eu passei o app pro meu celular , e queria saber como faço para conectar sem ser com o emulador ,tem que fazer algo a mais? O ip e a porta mudam? Porque esta dando erro e pedindo pra fechar o aplicativo no celular =X , obrigado
Abraços


26 Abr 2012, 01:27
Perfil
Google employee
Google employee
Avatar de usuário

Data de registro: 05 Abr 2011, 04:47
Mensagens: 1968
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] Trabalhando com Socket no Android
Muda sim, agora vc tem que colocar o ip do seu PC!!

Abraços!

_________________
Alexandre Antunes
@a3b @bemobi
Moto X

App@Bemobi: Apps Club - Loja de Apps baseada em assinatura que dá direito a usar ~400 Apps.

Campanha: Facilite sua vida e a dos outros usuários.
Objetivo: Vamos colocar a tag [RESOLVIDO] no título do tópico quando o problema for resolvido.


Use a ferramenta de busca do fórum e não espere tanto para que a sua dúvida seja respondida!

Quer trabalhar comigo??


26 Abr 2012, 01:56
Perfil WWW
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 106 Mensagens ]  Ir para a página 1, 2, 3  Próximo

Quem está online

Usuários vendo este fórum: Abraao, Adeja, Alan Unger, Anderson MarkZ, Anderson.OL, Andre Brito, andreluzz, Andrey, arkanjo, berchielli, bernardodauer, Biggs Darklighter, BloggerCaOS, boydivalor, brenda, brenno, brpiassa, Bruno, brunomalka, btminzon, caiodemarco, Caique, Captain Typho, Carlos, Carlos Alexandre, carlos rodrigues, cassianotartari, cavenaghi, celiapinheiro, Celso Jr., Chanceler Supremo Finis Valorum, christian, claudioalfonso, Corneta, cosmotheoro, culumin, DAVINCE, deborazb, Demerval, dr.faro, edervieira, edsonel, eliasmachado_rj, epsilva, erosvaldo, Flavio, Governador Wilhuff Tarkin, Guilherme, guilhermesmo, gustavo, henrique.garcia, Igor_M, IgorBrum, infonlinebr, italoraony, jacksonst, Jenius, joaquimfoto, Jorge Machin, Jota, juliaojunior, Julio Assis, juliomar, jwv, Ki-Adi-Mundi, klebersilvarocha, kpinheiro, laucode, Lelinho, linukiss, lisbao, lucastgomes, luiz, luizfilipe, luizneto79, Maiquell, mam_computer, Marcelo Lima, marcelocastellani, marcelochiquinho, MarceloMC, Marco Magoo, mauriciomag, mcurtis, Meticore, Moisés Souto, navegador, nrsf, Odigooogle™, oliveiramc, Patricia, pedro, peixe, pingumanbr, pmzara, polonia, pomarolli, Princesa Léia Organa, rafaelvital, rayberg, rerp7, Ricardo Chikasawa, ricardo_listadelphi, Rickxdx, robsonrg, rogerio, Roll, romuloigor, rubens_olv, SidneiCP, soulmachine, tChAnDy, teamamus, Thiago, thosjanas, tiagofalcao, vanmars, Velhinho, voliverio, vps_rj, wcaciano, wender, wesley.messias, Wesleyceraso, williamcmello, Wookiees, Wryel, Yoda, zaquiel e 2 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi