Comunicação entre dois celulares android[RESOLVIDO]

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();
						}
					}
				}


			}
		});

	}
}




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;
    }
}




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.

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

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");
						}


					}
				});

			}
		
	}

}





Ta resolvido?!!!

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

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