[RESOLVIDO] Socket + thread

13 respostas
ErasmoFreitas

Olá! estou com uma dúvida de como devo passar para uma thread os dados que recebo de um cliente via socket, tenho uma classe cliente que envia dados para uma classe distribuidor, essa classe recebe os dados e deveria startar uma thread toda vez que receber dados.

13 Respostas

drsmachado

E qual a dúvida???

ErasmoFreitas

como passo para a thread os dados que recebi do cliente

ErasmoFreitas

essa é minha classe distribuidor

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Distribuidor {
	public static void main(String[] args) throws Exception {
		// identificador
		System.out.println("|----------------------------------------------|");
		System.out.println("|           Socket Distribuidor                |");
		System.out.println("|----------------------------------------------|");
		// cria socket do distribuidor com a porta 1986
			DatagramSocket distribuidorSocket = new DatagramSocket(1986);

			byte[] dadosRecebidos = new byte[1024];
		//	byte[] dadosEnviados = new byte[1024];
			boolean validador = true;
			while (validador == true) {
				// declara o pacote a ser criado

				DatagramPacket pacoteRecebido = new DatagramPacket(
						dadosRecebidos, dadosRecebidos.length);
				// recebe o pacote do cliente

				distribuidorSocket.receive(pacoteRecebido);
				System.out.println("Pacote recebido");
			Thread p = new processo();
			p.start();
			}// fim do while
	
	}
}
d34d_d3v1l

cria uma classe que implementa a interface Runnable…
depois faça:

Runnable seuObj = new Runnable();
Threat t = new Thread(seuObj);

depois qndo receber os dados:

byte[] dados; // ...
seuObj.receberDados(dados);

abraz

ErasmoFreitas

acho que não forneci informações suficiente pra que a ajuda de vocês fosse mais util pra mim, estou fazendo um trabalho que consiste em uma ATM, onde tenho uma classe cliente que recebe os dados do usuário, que são repassados para a classe distribuidor via socket pela porta 1986, esse distribuidor faz uma verificação dos dados recebidos do cliente e repassa para a classe servidor, o meu objetivo é que eu possa executar mais de 1 cliente, ficando a classe distribuidor responsável apenas para receber as informações da porta 1986 e startar uma thread que vai fazer a comunicação com o servidor usando os dados que a classe distribuidor receber do cliente.
a thread é que vai receber os dados confirmados no servidor e devolver a informação ao cliente.

ErasmoFreitas

eu criei uma classe chamada processo que implementa runnable, só que não sei como passar as informações recebidas na classe distribuidor para as threads criadas a partir dessa classe

d34d_d3v1l

pq nao?

R

Cria um construtor na sua classe “processo” que receba as informações, exemplo:

public class Processo extends Thread {

   private final Informacoes informacoes;

   public Processo(Informacoes informacoes){
       this.informacoes = informacoes;
   }

   public void run(){
      //trabalha informacoes
   }

}

Depois usa:

Thread p = new Processo(informacoes);
d34d_d3v1l

ta errado…

ErasmoFreitas

e qual o certo?

d34d_d3v1l

Leia o que eu te disse que voce irá entender…
Mais atenção tb é recomendado :slight_smile:

ErasmoFreitas

deu certo \o/ agora é tratar um erro de inetAddres… e tudo fica 100%… obrigado a todos pela ajuda!!!

d34d_d3v1l

Se possível, modifique o titulo do tópico pra [resolvido]…
abraços,
boa sorte na app…

t+

Criado 8 de maio de 2012
Ultima resposta 10 de mai. de 2012
Respostas 13
Participantes 4