Ajuda , transformar essa classe Servidor Socket em multi-thread

Ola , tenho uma conexão socket entre um cliente android e um servidor java e gostaria de saber o que tenho que fazer pra deixar meu servidor multi-thread.
Aqui a minha classe servidor:

[code]package com.sevidor;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.DataInputStream;
import java.io.Flushable;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
/**
*

*/
public class Servidor extends JFrame {

private static boolean executando = true ;
private static String mensagem;
private static final int PORTA = 1234;
    public static String ip ;
    public static int porta;
    private static JTextArea status = new JTextArea();  



    
    public Servidor () {  
        // Define o t�tulo da janela  
        super ("FastRequest Servidor - BETA"); 
        
        
        	
        
			// TODO: handle exception
       
        this.montaJanela ();  
        
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);   //fecha aplica��o quando clica no botao fechar do JFrame  
        this.setLocationRelativeTo(null);//centraliza o form   
        this.setBackground(Color.GRAY);
        //Image img = Toolkit.getDefaultToolkit().getImage("servericone.png");  
        //etIconImage( img ); 
        //ImageIcon icon = getIcon("servericone.png");
        String plaf = "javax.swing.plaf.metal.MetalLookAndFeel";
		try {
			UIManager.setLookAndFeel(plaf);
		} catch (ClassNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (InstantiationException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IllegalAccessException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (UnsupportedLookAndFeelException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}  
        SwingUtilities.updateComponentTreeUI(this);
        
     }
    
    private void montaJanela () 
    {
    	
    	this.getContentPane ().add (status);  
    	
     }  
public static void main(String[] args) {
	
	Servidor janela = new Servidor();
	 
	janela.setSize (500, 180); 
	//janela.setUndecorated(true);
	 ImageIcon icone = new ImageIcon("E:\\ServidorJava\\Imagens\\servericone.png");  
     janela.setIconImage(icone.getImage()); 
	janela.setVisible (true);  
	
	try {
		ServerSocket server = new ServerSocket(1234);
		InetAddress addr = InetAddress.getLocalHost();
		System.out.println("----------- SERVIDOR CONECTADO "
				+ addr.getHostAddress() + " PORTA " + PORTA
				+ " -----------");
		displayMessage("----------- SERVIDOR CONECTADO "
				+ addr.getHostAddress() + " PORTA " + PORTA
				+ " -----------");
                    //JOptionPane.showMessageDialog(null, "Servidor conectado IP :"+addr.getHostAddress()+" Porta :"+PORTA);
                    
		System.out.println("Esperando Conexoes.");
		displayMessage("\nEsperando Conexoes.");
		Socket socket = server.accept();
		
		System.out.println("Sevidor-> Conectou Ip "
				+ socket.getInetAddress().getHostAddress());
		displayMessage("\nSevidor-> Conectou Ip "
				+ socket.getInetAddress().getHostAddress());
		
		DataInputStream in = new DataInputStream(socket.getInputStream());
		
		try {
			while (executando) {
				executando=true;
				int i = 1;
				i++;
				mensagem = in.readUTF();
	        		String login[] = new String[2];
	        	login = mensagem.split("#");
				System.out.println("Servidor-> Recebeu Nome : "
						+login[0] );
				
				displayMessage("\nServidor -> Recebeu Nome : "+login[0]);
				System.out.println("Servidor-> Recebeu Mesa : "
						+ login[1] );
				displayMessage("\nServidor -> Recebeu Mesa : "+login[1]);
				System.out.println("Servidor -> Recebeu Pedido :"
						+ login[2]);
				displayMessage("\nServidor -> Recebeu Pedido : "+login[2]);
				displayMessage("\nServidor ------> Pedido Finalizado ");
				displayMessage("                                     ");	
				
			}
			System.out.println("Servidor-> Finalizado.");
			displayMessage("\nServidor-> Finalizado.");	
			
				
			in.close();
			
			socket.close(); 
			server.close();
				
			
			
		} catch (Exception e) {
			System.err.println("Servidor-> Erro: " + e.getMessage());
			executando = false;
		}
		
		

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

}

private static void displayMessage(final String texto) {
	SwingUtilities.invokeLater(
			new Runnable(){
				public void run(){
					status.append(texto);
				}
			}
	);
	
	
}

}[/code]
Obrigado.

Amigo, o que você tem que fazer é disparar uma thread para cada conexão realizada com um cliente diferente. Assim você pode criar uma classe que irá representar uma thread onde você pode guardar as informações de cada cliente. Aqui no fórum existe várias tópicos relacionados ao assunto, pode dar uma olhada nesse aqui e ver se ajuda:

no github tb tem várias implementaçoes simples de servidores http com thread

abrasss

Então cara , li seu exemplo , testei e funcionou , mas fui implementar no meu, não deu certo , como faria isso exatamente ? Obrigado pela ajuda !

Opa, tudo bom?

O que que “não funcionou”, cara? Foi lançada alguma exceção? Poste aí o erro pra gente ver :slight_smile:

Vou explicar do começo pra nao me perder , kk, a minha aplicação é o seguinte , realizar pedido via celular , a pessoa entra com o nome com a mesa e o pedido e manda pro servidor …eu tentei conectar com o emulador e com o celular comum …não da , ele nao aparece que conectou dois ips…acho que nao consegui intender.