Socket e Thread Java - Servidor/clientes

1 resposta
phanton

Galera, estou fazendo um projeto bem simples pra faculdade, porem estou tendo problemas com relação a codigo,

o projeto cria um servidor para multiplas conexoes, por enquanto só recebe mensagens. mas é o que me interessa, sem retorno para os clientes…

o problema ocorre quando os clientes tentam enviar mais de uma mensagem. ocorre o seguinte erro:

java.io.StreamCorruptedException: invalid stream header: 7371007E

Segue abaixo o codigo:

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.util.Scanner;

CLIENTE
public class ClienteMarcio1 {

public static void main(String[] args) {

	Scanner sc = new Scanner(System.in);
	try {
	
	System.out.println("Tentando se conectar !");
	Socket socket = new Socket("localhost",2012);
	System.out.println("Conectado");
	ObjectOutputStream saida = new ObjectOutputStream(socket.getOutputStream());
	String mensagem = null;
	while(mensagem != "EXIT"){
	System.out.println("Entre com uma mensagem");
	 mensagem = sc.nextLine();
	 Mensagem msg = new Mensagem(mensagem);
	 saida.writeObject(msg);
	 saida.flush();
	}
	} catch(IOException cause){
		System.out.println("I/O > " + cause);
	}
}

}

SERVIDOR

import java.io.IOException;

import java.io.ObjectInputStream;

import java.net.ServerSocket;

import java.net.Socket;
public class ServidorMarcio extends Thread {

Socket connection;

String usuario;

String msgRecebida;
public ServidorMarcio(Socket connection) {
	this.connection = connection;
}

public ServidorMarcio() {
	ServerSocket server;
	try {
		server = new ServerSocket(2012);
		while (true) {
			System.out.println("Aguardando...");
			Socket socket = server.accept();
			System.out.println("Novo usuário conectado!");
			Thread t = new ServidorMarcio(socket);
			t.start(); // inicia o metodo RUN da Classe Instanciada na
						// Thread
		}
	} catch (IOException cause) {
		cause.printStackTrace();
	}
}

public void run() {
	try {
		while(true){	
			ObjectInputStream entrada = new ObjectInputStream(connection.getInputStream());
			Mensagem msg = (Mensagem) entrada.readObject();
			msg.printInfo();
		}
	}catch (IOException cause){
		System.out.println("I/O > " + cause);
	} catch(ClassNotFoundException cause){
		System.out.println("N/F > " + cause);
	}
}

}

SERIALIZAÇÃO
import java.io.Serializable;

public class Mensagem implements Serializable {
String mensagem = null;

public Mensagem(String mensagem) {
	this.mensagem = mensagem;
}

public void printInfo(){
	System.out.println(mensagem);
}

}

Ignorem a nomeclatura pois o projeto ainda nem implementa O.O.

Grato desde já

1 Resposta

ViniGodoy

Esse link pode nos ajudar:
http://www.guj.com.br/java/50115

Criado 8 de agosto de 2012
Ultima resposta 8 de ago. de 2012
Respostas 1
Participantes 2