Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema enviando un Objecto con TCP Socket

Hola a todos!
Estoy practicando con los TCP sockets. Básicamente, hasta ahora he conseguido hacer un Cliente y un Server y conseguir que el cliente envíe un Objeto. El cliente lee un archivo de texto donde pone un nombre y unos números, que son las puntuaciones de un juego de adivinar números. Estos datos los instancia a una clase Objeto (serializable) y los envía al Server.

Podeis ver el código aquí:

public class TCPObjectClient{

private static final int BUFSIZE = 4096; //4kB buffer

public static void main(String[] args) throws java.io.IOException {
int port = 6123; //¿¿Which port??
String serverIP = "127.0.0.1"; //Server IP //can be localhost

//user input File name
Scanner keyBoardIn= new Scanner(System.in);
System.out.println("Please insert File name: ");
String nameFile = keyBoardIn.nextLine();
System.out.println("Sending the File to the server\n");
//String nameFile2 = nameFile+".txt";
File nameFile2 = new File(nameFile+".txt"); //Does it work???
Scanner fileInput= new Scanner(new File(""+nameFile2));

String name;
int NumberOfGame;
int[] score={0,0,0,0,0};

name=fileInput.nextLine();
NumberOfGame=fileInput.nextInt();
for(int i=0; i<5; i++){
score[i]=fileInput.nextInt();
}

//close the file
fileInput.close();

//instantiate player Object
playerObject myObjectPlayer = new playerObject(); //instantiate new player object
myObjectPlayer.setName(name);
myObjectPlayer.setScores(score);

try{
//1-Create Socket
Socket clientSock = new Socket(serverIP, port);
//2-Output streams
OutputStream out=clientSock.getOutputStream();
ObjectOutputStream objectOut=new ObjectOutputStream(out); //wrapp
//3-Send object
objectOut.writeObject(myObjectPlayer);
//4-Close connection
objectOut.close();
clientSock.close();
}catch (IOException e){
System.out.println(e.getMessage());
}

}//main end
}//class end

Y el Server que lo recibe, es este:

[public class TCPObjectServer{
private static final int BUFSIZE = 4096; // 4kB buffer
public static void main(String[] args){

int port=6123;
try{
//1-Create a ServerSocket
ServerSocket serverSocket = new ServerSocket(port);
while(true){ //run forever waiting for more connections
//2-Waiting for a connection
System.out.println("Waiting for a connection on port "+serverSocket.getLocalPort()); //not necessary but good
Socket clientSocket = serverSocket.accept();
SocketAddress clientAddress = clientSocket.getRemoteSocketAddress(); //not necessary but good to know when the server accepts a client
System.out.println("Handling client at "+clientAddress);
//3-Input/output streams
InputStream input=clientSocket.getInputStream(); //inputstream created
ObjectInputStream objectInput = new ObjectInputStream(input); //wrap for the object
//4-Process connection
playerObject inObjectPlayer = (playerObject) objectInput.readObject(); //reads a playerObject sended by the client
//4.1-Analysing player data
String nombre = inObjectPlayer.getName();
double Average = inObjectPlayer.calculateAverage();
int Best = inObjectPlayer.getBestScore();
//4.2-Displaying results
System.out.println("Player name is: \n"+nombre);
System.out.println("Average score: \n"+Average);
System.out.println("Best score is: \n"+Best);
//5-Close Connection
System.out.println("\n \n");
System.out.println("Connection close. Waiting for more connections\n");
objectInput.close();//close the object input stream
clientSocket.close();//close the connection to the client
} //while(true) ends
}catch (ClassNotFoundException e){
e.printStackTrace();
}catch (IOException e){
System.err.println(e);
}
}//main ends
}//class ends

Hasta aquí todo bien. Funciona. Pero porque el Archivo de texto de donde se sacan los valores, solo tiene el nombre de un player y 5 puntuaciones.

Ahora el problema está en que me han pedido que lo modifique para que tanto el cliente como el servidor, puedan hacerlo para un archivo donde hay 100 players, con sus respectivas 5 puntuaciones cada uno. (tendré que usar un array de 100 objetos players)

Cómo puedo hacerlo??

Alguien podría echarme una mano? A mí no se me ocurre nada...

Muchísimas gracias de antemano!!!

abril 18, 2015 | Registered Commenterdagalar