Socket - Como receber mais de uma conexão?

3 respostas
dineybook

Oi pessoal

Eu gostaria de fazer o meu servidor receber mais de uma conexão simultanea… Como eu faria isso?

Segue o meu código:

/**
 *
 * @author Valdinei F. Lima
 */
import java.io.*;
import java.net.*;
 
 public class Servidor {
 
     public static void main(String[] args) {
         ServerSocket servidor      = null; 
         Socket s                   = null;
         BufferedReader entrada     = null;
         
                
         try{
             servidor = new ServerSocket(2712);
             s = servidor.accept();
             entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));
             

             if (entrada.readLine().equals("ip")) {

                 ProcessBuilder comando = new ProcessBuilder(new String[] {"ifconfig"});
                 comando.redirectErrorStream(true);
                 Process proc = comando.start();
                 
                 InputStream input = proc.getInputStream();

                 byte pacote[] = new byte[600];

                 input.read( pacote );
                 
                 String retorno;
                 retorno = new String( pacote );
                 System.out.println( retorno );

             }else{
                 System.out.println("Esta função não existe.");
             }
                 
         }
         catch(IOException ioException){
             ioException.printStackTrace();
         }finally{
             try{
                 s.close();
                 servidor.close();
             }
             catch(IOException ioException){
                 ioException.printStackTrace();
             }
         }
     }
 }

Abraços.

3 Respostas

zirocool

Tu pode fazer isso através de threads…

F
import <a href="http://java.io">java.io</a>.<em>;

import <a href="http://java.net">java.net</a>.</em>;

import java.util.Properties;

public class SocketServer implements Serializable {

public static void main(String args[]) {
	ServerSocket server = null;
	int counter = 1;
	//File file = null;
	Properties pos = new Properties();
	//FileInputStream fis = null;
	

	while (true) {
		System.out.println("*** Servidor ***"); 

		try {

			//carregas as propriedades do arquivo de configuracoes
			pos.load( new FileInputStream("config.properties") );
			
			// Criando o socket servidor
			server = new ServerSocket( Integer.parseInt( pos.getProperty("PORTA" ) ) );
			System.out.println("Aguardando conexao...");
			while (true) {
				// Aguardando a conexao
				
				Socket connection = server.accept();
				System.out.println("Conexao " + counter + " recebida de "
						+ connection.getInetAddress().getHostName());

//aqui é a parte da thread… cria uma nova thread, com a conexão recebida e fica esperando outras
new ThreadeEco(connection,counter, pos).start();

++counter;
				
				if (counter >= 999)
					counter = 1;
			}

		} catch (IOException ex) {
			System.out.println("Erro ao Abrir o Socket \n "+ ex.getMessage());
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}//final do while
}

}

F

a esqueci de uma parte,

onde tem
new ThreadeEco(connection,counter, pos).start();

ThreadeEco, é uma outra class(abaixo), que estou invocando, passando alguns parametros…

public class ThreadeEco extends Thread {
private Socket connection = null;

private int counter;

private DataOutputStream dataoutput;

private DataInputStream datainput;

private Properties pos = null;

public ThreadeEco(Socket so, int cont, Properties p) {
	this.connection = so;
	this.counter = cont;
	this.pos = p;
}

public void run() {....

//aqui vc implementa seu código…
…}}}}

Criado 20 de agosto de 2007
Ultima resposta 21 de ago. de 2007
Respostas 3
Participantes 3