Comunicação entre dois celulares android[RESOLVIDO]

6 respostas
C

Pessoal é o seguinte,
Estou desenvolvendo uma aplicação e preciso de que dois celulares android se comuniquem.
Consegui fazer com que os dois entrem no servidor(que está no computador)e a partir dai se comuniquem.

Não sei muito de redes, por isso gostaria muito de uma luz para saber por onde proceder.

Eis meus códigos:

Servidor

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;





public class Server {



	public static void main(String[] args){

		ServerSocket serverSocket = null;

		Socket socket = null;

		DataInputStream dataInputStream = null;

		DataOutputStream dataOutputStream = null;

		

		System.out.println("IP da rede " +recuperarIpDaRede());

		

		try {

			serverSocket = new ServerSocket(8888);

			System.out.println("Aguardando Conexoes");

		} catch (IOException e) {

			e.printStackTrace();

		}



		while(true){

			try {

				socket = serverSocket.accept();

				dataInputStream = new DataInputStream(socket.getInputStream());

				dataOutputStream = new DataOutputStream(socket.getOutputStream());

				//dataOutputStream.writeUTF(recuperarIpDaRede());

				System.out.println("Mensagem: " + dataInputStream.readUTF());

				



			} catch (IOException e) {

				e.printStackTrace();

			}

			finally{

				if( socket!= null){

					try {

						socket.close();

					} catch (IOException e) {

						e.printStackTrace();

					}

				}



				if( dataInputStream!= null){

					try {

						dataInputStream.close();

					} catch (IOException e) {

						e.printStackTrace();

					}

				}



				if( dataOutputStream!= null){

					try {

						dataOutputStream.close();

					} catch (IOException e) {

						e.printStackTrace();

					}

				}

			}







		}

	}

	private static String recuperarIpDaRede(){

	    InetAddress ia = null;  

	    try {  

	        ia = InetAddress.getLocalHost();  

	    } catch (Exception e) {  

	        e.printStackTrace();  

	    }  

	    

	    return ia.getHostAddress();

	     





	}

}

Cliente

package com.android;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;



import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AppClienteAndroid extends Activity {

	EditText texto;
	EditText textoIp;
	String ipdarede = null;
	TextView tv;
	

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		texto = (EditText)findViewById(R.id.campoTexto);
		textoIp = (EditText)findViewById(R.id.campoTextoIp);
		tv = (TextView)findViewById(R.id.tvStatus);

		Button buttonCon = (Button)findViewById(R.id.botaoConecta);

		buttonCon.setOnClickListener(new View.OnClickListener(){
			public void onClick(View arg0){
					ipdarede = textoIp.getText().toString();
					tv.setText("Conectado");
					
					
			
			}
		});		

		Button button = (Button)findViewById(R.id.botao);

		button.setOnClickListener(new View.OnClickListener(){
			public void onClick(View arg0){
				Socket socket = null;
				DataOutputStream dataOutputStream = null;
				DataInputStream dataInputStream = null;

				try {
					socket = new Socket(ipdarede, 8888); 
					dataOutputStream = new DataOutputStream(socket.getOutputStream());
					dataInputStream = new DataInputStream(socket.getInputStream());
					dataOutputStream.writeUTF(texto.getText().toString());
				

				} catch (UnknownHostException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}finally{
					if (socket != null){
						try {
							socket.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}

					if (dataOutputStream != null){
						try {
							dataOutputStream.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}

					if (dataInputStream != null){
						try {
							dataInputStream.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}


			}
		});

	}
}

6 Respostas

C

Os códigos lá estão dando tudo certo, porém, para o que eu preciso não está.

Eu quero fazer a comunicação entre dois androids.

Um amigo está me ajudando e agente conseguiu fazer alguns códigos.
Em se tratando de PC, deu tudo certo, funcionou blzinha.
Porém, quando fui adaptar ao android, está dando bronca.

Consigo mandar msg para o servidor através do android, porém, não consigo para outro celular.
Provavelmente deve ser problema com as thread que não estou sabendo resolver.
Podem me ajudar?

Servidor

import java.io.*;   
import java.util.*; 
import java.net.*;  

        
public class Servidor extends Thread {
    private static Vector clientes;
    private Socket clienteSocket;
    private String nomeCliente;
    public static void main( String args[] ) {
        
        clientes = new Vector();
        try {
            
            ServerSocket servidorSocket = new ServerSocket( 8888 );
            System.out.println( "<SERVER> Servidor iniciado e aguardando conexões." );
            while( true ) {
                
    
                Socket clienteSocket = servidorSocket.accept();
                Thread threadCliente = new Servidor( clienteSocket );
                threadCliente.start();
            }
            
         
        } catch ( IOException erro ) {
            
            
            System.out.println( "IOException: " + erro );
            
        } catch ( ArrayIndexOutOfBoundsException erroinicio ) {
            
            System.out.println( "Inicialização incorreta!\n java Servidor PORTA_DE_CONEXAO" );
        }
    }
    
    
    public Servidor( Socket clienteS ) {
        clienteSocket = clienteS;
    }
    

    public void run() {
        

        try {
            
           
            BufferedReader mensagem = new BufferedReader(  new InputStreamReader( clienteSocket.getInputStream() )  );
            PrintStream usuario = new PrintStream(  clienteSocket.getOutputStream()  );
       
            nomeCliente = mensagem.readLine();
            if ( nomeCliente == null ) { return; }
   
            clientes.add( usuario );
            
            System.out.println( "<SERVER> Usuário " + nomeCliente + " adicionado ao servidor." );
         
            String mensg = mensagem.readLine();
            
            while (  (mensg != null) && !(mensg.trim().equals("/server quit"))  ) {
                comunicar( usuario, mensg );
                 System.out.println( "msg de " + nomeCliente + ": " + mensg );
                 mensg = mensagem.readLine();
            }
            
            comunicar( usuario, " desconectou." );
            System.out.println( "<SERVER> Usuário " + nomeCliente + " desconectou do servidor." );
            clientes.remove( usuario );
            clienteSocket.close();

        } catch ( IOException erro ) {
        
            System.out.println( "IOException: " + erro );
            
        } 
    }

    public void comunicar( PrintStream usuario, String msg ) throws IOException {
       Enumeration usua = clientes.elements();
       while (usua.hasMoreElements()) {
            PrintStream destino = ( PrintStream ) usua.nextElement();
            if ( destino != usuario ) { destino.println( "<" + nomeCliente + "> " + msg); }
        }
    }
    
}

cliente

import java.io.*;   
import java.net.*;  
public class Cliente extends Thread {
    
   
    private Socket csSocket;
    
   
    private static boolean conexao = true;
    
   
    public static void main( String args[] ) {
        
      
        try {
            
           
            Socket csSocket = new Socket( args[0], Integer.parseInt(args[1]) );
            
           
            PrintStream destino = new PrintStream( csSocket.getOutputStream() );
 
            BufferedReader entradaCliente = new BufferedReader( new InputStreamReader(System.in) );
            
         
            destino.println( args[2] );
            
           
            Thread threadReceber = new Cliente( csSocket );
            threadReceber.start();
            
          
            String mensOut;
            
            
            while( true ) {
                
             
                System.out.print( "> " );
                
            
                mensOut = entradaCliente.readLine();
               
                if ( !conexao ) { break; }
                
               
                destino.println( mensOut );
            }
            
        } catch ( IOException erro ) {
            

            System.out.println( "IOException: " + erro );
            
        } catch ( ArrayIndexOutOfBoundsException erroinicio ) {
            

            System.out.println( "Inicialização incorreta!\n java Cliente IP_SERVIDOR PORTA_SERVIDOR NOME_USUARIO" );
        }
    }
  
    public Cliente( Socket csSoc ) {
        csSocket = csSoc;
    }
    
  
    public void run() {
        
    
        try {
            
           
            BufferedReader entradaServidor = new BufferedReader( new InputStreamReader(csSocket.getInputStream()) );
            
        
            String mensIn;
            
            while (true) {
                
                mensIn = entradaServidor.readLine();
                
               
                if (mensIn == null) {
    
                    System.out.println( "<SERVER> Fim de conexão" );
                    break;
                    
                }
               
                System.out.print( "\n" + mensIn + "\n" + ">" );
                
            }
            

        } catch ( IOException erro ) {
            

            System.out.println( "IOException: " + erro );
            
        }
       
        conexao = false;
    }
}

cliente no Android

package com.android;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;



import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AppClienteAndroid extends Activity {

    EditText texto;
    EditText textoIp;
    String ipdarede = null;
    TextView tv;
    PrintStream destino;
    private static boolean conexao = true;
    private Socket csSocket;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        texto = (EditText)findViewById(R.id.campoTexto);
        textoIp = (EditText)findViewById(R.id.campoTextoIp);
        tv = (TextView)findViewById(R.id.tvStatus);

        Button buttonCon = (Button)findViewById(R.id.botaoConecta);

        buttonCon.setOnClickListener(new View.OnClickListener(){
            public void onClick(View arg0){
                try{
                    Socket csSocket = new Socket("192.168.0.100", 8888 );
                    destino = new PrintStream( csSocket.getOutputStream() );
                    destino.println( "Diego" );
                    Thread t = new Thread();
                    t.start();
                    


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



            }
        });     

        Button button = (Button)findViewById(R.id.botao);

        button.setOnClickListener(new View.OnClickListener(){
            public void onClick(View arg0){
                String msg = texto.getText().toString();
                destino.println(msg);
                //tv.setText(msg);
                
            }
        });

    }

    public void run() {

        try {


            BufferedReader entradaServidor = new BufferedReader( new InputStreamReader(csSocket.getInputStream()) );
            String mensIn;
            while (true) {
                mensIn = entradaServidor.readLine();
                if (mensIn == null) {
                    System.out.println( "<SERVER> Fim de conexão" );
                    break;
                }
                tv.setText(mensIn);
                
            }

        } catch ( IOException erro ) {

            System.out.println( "IOException: " + erro );

        }

        conexao = false;
    }
}
S

Se você quer conectar um android direto ao outro, você deve implementar um server socket para aceitar conexões nele também. Agora se você quer passar pelo servidor, você deve pegar a mensagem recebida do socket de um android e enviar para o socket do outro android.

T

Se não tiver necessidade do servidor, tente bluetooth.

C

Eu preciso sim de um servidor.

Estou tentando dessa forma agora. Ele se conecta ao servidor, porém, os elementos da tela não aparecem

package com.android;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;



import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AppClienteAndroid extends Activity {

	EditText texto;
	EditText textoIp;
	String ipdarede = null;
	TextView tv;
	PrintStream destino;
	private static boolean conexao = true;
	private Socket csSocket;


	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		

		try{
			Socket csSocket = new Socket("192.168.0.100", 8888 );
			destino = new PrintStream( csSocket.getOutputStream() );
			destino.println( "Testando" );

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

				Button button = (Button)findViewById(R.id.botaoEnviaMensagem);

				button.setOnClickListener(new View.OnClickListener(){
					public void onClick(View arg0){
						try{
							String msg = texto.getText().toString();
							destino.println(msg);

						}catch(Exception e){
							tv.setText("Erro - Não conseguiu enviar mensagem");
						}


					}
				});

			}
		
	}

}
N

Ta resolvido?!!!

Qual foi a solução?
Posta aí pra nós.

V

Amigo, conseguiu resolver?
Posta a resposta pra gente. Estou enfrentando esse mesmo problema. Não estou conseguindo enxergar onde está meu erro.

Criado 31 de maio de 2011
Ultima resposta 16 de jan. de 2012
Respostas 6
Participantes 5