Erro no servidor RMI

1 resposta
Levitarj

Boa Tarde !!!
Estou fazendo jogo que tem que ser em rmi , Domino, mais quando ativo o servidor entra o seguinte erro :

Connection refused to host: 192.168.0.11; nested exception is:

o codigo do servidor e esse.

package server;

import client.ClientRemote;

import exceptions.InvalidNumberOfPlayersException;

import exceptions.InvalidPieceToPlayException;

import exceptions.InvalidTokenException;

import exceptions.NotPlayersTurnException;

import game.Domino;

import game.Game;

import game.Player;

import java.math.BigInteger;

import java.rmi.AlreadyBoundException;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

import java.rmi.server.UnicastRemoteObject;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Set;

import client.Client;

public class Server implements ServerRemote {

private Map<String, Player> players = new HashMap<String, Player>();

private List<String> acceptedPlayers = new ArrayList<String>();



// private Game game;



/*

*   Start the remote service

*/

public Server() {

// TODO Auto-generated constructor stub

}

@Override

public synchronized Map<String, String> login(String userName) throws RemoteException {

	Map<String, String> authToken = new HashMap<String, String>();



	if(userNameAlreadyExists(userName)) {

		System.out.println("O Jogador " + userName + " ja existe.");

		authToken.put(LOGIN_REQUEST_RESPONSE, Integer.toString(LOGIN_ERROR_ALREADY_EXISTS));

	} else if(isValidUserName(userName)) {

		String t;

		do {

			t = generateRandomToken();

		} while (players.containsKey(t));

		

		authToken.put(LOGIN_REQUEST_TOKEN, t);

		authToken.put(LOGIN_REQUEST_RESPONSE, Integer.toString(LOGIN_OK));

		

		Player player = new Player(userName, authToken.get(LOGIN_REQUEST_TOKEN));

		players.put(authToken.get(LOGIN_REQUEST_TOKEN), player);

		System.out.println("O Jogador " + userName + " e um usuario valido e esta se conectando.");

		

		// verificando se j&#65533; tem 4 usu&#65533;rios logados pra iniciar um jogo

		acceptedPlayers.add(t);

		System.out.println("Existem " + acceptedPlayers.size() + " jogadores conectados.");

		if (acceptedPlayers.size() >= Game.NUMBER_OF_PLAYERS) {

			// criando uma lista com os jogadores a iniciar o jogo

			final List<Player> tempPlayers = new ArrayList<Player>();

			for (int i = 0; i < Game.NUMBER_OF_PLAYERS; i++) {

				String p = acceptedPlayers.remove(0);

				tempPlayers.add(this.players.get(p));

			}

			

			new Thread(new Runnable() {

				public void run() {

					try {

						new Game(tempPlayers, Server.this).startGame();

					} catch (InvalidNumberOfPlayersException e) {

						e.printStackTrace();

					} catch (RemoteException e) {

						// TODO Auto-generated catch block

						e.printStackTrace();

					}

				}

			}).start();

		}

	} else {

		authToken.put(LOGIN_REQUEST_RESPONSE, Integer.toString(LOGIN_ERROR_INVALID_LOGIN));

	}

	

	return authToken;

}



@Override

public synchronized void logout(String playerToken) throws RemoteException,InvalidTokenException {

if (players.get(playerToken) == null) {

	throw new InvalidTokenException();

}



Player p = players.get(playerToken);

// verificando se o jogador est&#65533; em jogo

if (p.getCurrentGame() != null) {

	p.getCurrentGame().removePlayer(p);

} else if (acceptedPlayers.indexOf(p.getAuthToken()) != -1) {

	acceptedPlayers.remove(acceptedPlayers.indexOf(p.getAuthToken()));

}



// unbind client's service

Registry registry = LocateRegistry.getRegistry();

try {

	registry.unbind(Client.SERVICE_NAME_PREFIX + p.getUserName());

} catch (NotBoundException e) { }



// remover da lista de jogadores

players.remove(playerToken);

}

// Generating a random SHA-1 token to send for the player 

	private String generateRandomToken() {

		try {

			String s = Double.toString(Math.random());

			MessageDigest md = MessageDigest.getInstance("SHA-1");

			md.update(s.getBytes());

			BigInteger hash = new BigInteger( 1, md.digest() );

			return hash.toString(16);

		} catch (NoSuchAlgorithmException e) {

			e.printStackTrace();

			return null;

		}

		

	}

	

	// Verify if an username is valid

	private boolean isValidUserName(String userName) {

		if(!(userName instanceof String) || userName == null || userName.length() == 0 || !userName.matches(CLIENT_LOGIN_REGEX)) {

			return false;

		} else {

			return true;

		}

	} 

	

	// verify if an username is already used

	private boolean userNameAlreadyExists(String userName){

		if (players == null) return false;

		Set<String> tokens = players.keySet();

		

		for (String t: tokens) {

			if (players.get(t).getUserName().equals(userName)) {

				return true;

			}

		}

		

		return false;

	}

	/*

	 * main Method

	 */

	public static void main(String[] args) {

		try {

			

		    

		    Server s = new Server();

		    ServerRemote stub;

		    

			stub = (ServerRemote) UnicastRemoteObject.exportObject(s, SERVICE_OBJECT_PORT);

			

		Registry registry = LocateRegistry.getRegistry();

    registry.bind(SERVICE_OBJECT_NAME, stub);



		    System.out.println("O servidor esta pronto e aguardando clientes.");

		} catch (RemoteException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		} catch (AlreadyBoundException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		}



	}



@Override

public boolean makeMove(String playerToken, Domino d, int position)

		throws RemoteException, InvalidTokenException,

		NotPlayersTurnException, InvalidPieceToPlayException {

	if (players.get(playerToken) == null) {

		throw new InvalidTokenException();

	}

	

	players.get(playerToken).getCurrentGame().makeMove(players.get(playerToken), d, position);

	return true;

}



@Override

public boolean isAValidPieceToPlay(String playerToken, Domino d)

		throws RemoteException, InvalidTokenException {

	if (players.get(playerToken) == null) {

		throw new InvalidTokenException();

	}

	

	return players.get(playerToken).getCurrentGame().isAValidPieceToPlay(d);

}



// libera um jogador para come&#65533;ar a jogar novamente

	public synchronized void freePlayer(Player p) {

		if (acceptedPlayers.contains(p.getAuthToken())) return;

		

		acceptedPlayers.add(p.getAuthToken());

		System.out.println("Existem " + acceptedPlayers.size() + " jogadores conectados.");

		if (acceptedPlayers.size() >= Game.NUMBER_OF_PLAYERS) {

			// criando uma lista com os jogadores a iniciar o jogo

			final List<Player> tempPlayers = new ArrayList<Player>();

			for (int i = 0; i < Game.NUMBER_OF_PLAYERS; i++) {

				String t = acceptedPlayers.remove(0);

				tempPlayers.add(this.players.get(t));

			}

			

			new Thread(new Runnable() {

				public void run() {

					try {

						new Game(tempPlayers, Server.this).startGame();

					} catch (InvalidNumberOfPlayersException e) {

						e.printStackTrace();

					} catch (RemoteException e) {

						// TODO Auto-generated catch block

						e.printStackTrace();

					}

				}

			}).start();

		}

	}

	

	public void removePlayer(Player p) {

		// verificando se o jogador est&#65533; em jogo

		if (p.getCurrentGame() != null) {

			p.getCurrentGame().removePlayer(p);

		} else if (acceptedPlayers.indexOf(p.getAuthToken()) != -1) {

			acceptedPlayers.remove(acceptedPlayers.indexOf(p.getAuthToken()));

		}

		

		// unbind client's service

		Registry registry;

		try {

			registry = LocateRegistry.getRegistry();

			registry.unbind(Client.SERVICE_NAME_PREFIX + p.getUserName());

		} catch (RemoteException e1) {

			// TODO Auto-generated catch block

			e1.printStackTrace();

		} catch (NotBoundException e) { }

		

		// remover da lista de jogadores

		players.remove(p.getAuthToken());

	}



@Override

public void registerObject(ClientRemote cr, String name)

		throws RemoteException, AlreadyBoundException {

	Registry registry;

	registry = LocateRegistry.getRegistry();

	registry.bind(name, cr);

	

}

}

Alguém pode me ajudar?
abracos…

1 Resposta

Jemerson

Levitarj,
quando for adicionar código no forum, coloque entre as tags [code ] seu codigo [/code ]( sem os espaços que adicionei
depois da palavra code).
Isso facilita na análise do algoritmo.

Criado 3 de dezembro de 2011
Ultima resposta 3 de dez. de 2011
Respostas 1
Participantes 2