Problema enviando objetos por socket e outputstreams em java

2 respostas
java
rafaelarbl

Oi gente

Estou desesperada com esse problema, não entendo o que está causando ele.

Aqui está meu código pra vocês importarem: http://s000.tinyupload.com/?file_id=54765768565213827710

Olha, eu mando um objeto de um transmissor para um receptor, só que eu imprimo o objeto que eu to mandando e o objeto que eu to recebendo e o resultado é que o objeto que eu recebo não é o que eu mandei.
Eu queria saber por que.
E, se possível, arrumar isso.

Por favor, estou muito muito muito desesperada.

2 Respostas

staroski

Pôxa, é preciso muita boa vontade pra baixar um arquivo .zip, contendo arquivos .class. A maioria dos antivirus e navegadores bloqueiam o download, achando que é vírus.
Você poderia ter postado suas 4 classes aqui no fórum.

Aparentemente tem muita coisa estranha na forma como você implementou seu trabalho.
O problema de você não estar recebendo dados na sua classe Receptor, é porque sua classe Transmissor nunca envia nada.

String res = q.toString();
System.out.println("Informação enviada para o servidor com sucesso.");
System.out.println("O quadro ethernet enviado para o servidor foi: " + res);

/* recebe dados -> Servidor para cliente. */
ObjectInputStream input = new ObjectInputStream(sock.getInputStream());
String str = (String) input.readObject();
System.out.println("A informação recebida do servidor é: " + str);

Observe o código acima, você apresenta uma mensagem dizendo que enviou os dados pro servidor, mas cadê o código que enviou os dados?
Não foi implementado!

Outras coisas estranhas:

if (tamanho > 0 || tamanho < 2000) {
	if (tamanho < 1500) {
		QuadroEthernet q1 = new QuadroEthernet();
		QuadroEthernet q = q1.criaquadro(tamanho, macorigem, macdestino);
		enviaerecebe(q);
		System.out.println("Vejamos: " + q.toString());
	} else {
		int metade = tamanho / 2;
		QuadroEthernet q1 = new QuadroEthernet();
		QuadroEthernet q3 = q1.criaquadro(metade, macorigem, macdestino);
		enviaerecebe(q3);
		QuadroEthernet q2 = new QuadroEthernet();
		QuadroEthernet q4 = q2.criaquadro(metade, macorigem, macdestino);
		enviaerecebe(q4);
	}
}

Você instancia um objeto do tipo QuadroEthernet e daí usa essa instância pra instanciar outro objeto do tipo QuadroEthernet, não faz o menor sentido.
O pior é que todos os atributos da sua classe QuadroEthernet são estáticos, o que é mais estranho ainda.

Você também implementou um método de cerca de 150 linhas e 17 if-else aninhados pra validar o formato de um endereço mac, coisa que pode ser feita com expressão regular em 2~3 linhas, até em 1, dependendo da forma como programa.

Você também está utilizando ObjectOutputStream para enviar somente Strings e não objetos inteiros, também não faz sentido.

Recomendo dar uma estudada na API do Java e principalmente aprender lógica e programação orientada a objetos.

pfk66

Óbvio que são dois objetos diferentes rs. O objeto “recebido” não tem o mesmo endereço de memória do que foi “transmitido”.

Por que não existe objeto nenhum sendo enviado por socket. É apenas uma força de expressão. O que vai ser transmitido é o conteúdo do objeto (tipos primitivos) que depois são usados pra instanciar um novo objeto do outro lado.

Criado 16 de novembro de 2016
Ultima resposta 17 de nov. de 2016
Respostas 2
Participantes 3