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� tem 4 usu�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� 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�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� 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…