Java - Multi conexiones con socket

 
Vista:

Multi conexiones con socket

Publicado por Oscar (4 intervenciones) el 27/11/2006 14:36:09
hola. implemente un juego de barcos y lo modifique para que un jugador realice las tareas como servidor y los demas que se conecten puedan jugar unos contra otros a la misma vez.

mi problema es que cuando al aceptar un cliente en el proximo me dice que la direccion ya esta siendo usada o algo parecido, supongo que sera que solo puedo tener una conexion por puerto, quisiera una posible solucion...gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Clase Servidor

Publicado por Tom (16 intervenciones) el 27/11/2006 20:41:43
package sockets;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

/**
*
* @author
*/
public class Server {

/** Creates a new instance of Main */
public Server() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
ServerSocket sserv = null;
System.out.println("Starting Server");
try {
sserv = new ServerSocket(8080);
while(true) {
Socket client = sserv.accept();
System.out.println("Accepted: " + client.getInetAddress());
AcceptedSocket tmp = new AcceptedSocket(client);
tmp.start();
}
} catch (UnknownHostException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if(sserv != null)
sserv.close();
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Thread para el servidor

Publicado por Tom (42 intervenciones) el 27/11/2006 20:52:16
package sockets;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
*
* @author
*/
public class AcceptedSocket extends Thread {
private static int i = 0;
private int nS;
Socket client;

/** Creates a new instance of AcceptedSocket */
public AcceptedSocket(Socket client) {
nS = i++;
this.client = client;
}
/* */
public void run() {
String ret;
try {
BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));
OutputStreamWriter os = new OutputStreamWriter(client.getOutputStream());
while((ret = is.readLine()) != null) {
System.out.println("AS(" + nS +") reads \"" + ret +"\"");
os.write(ret.concat("-" + nS + "\n"));
os.flush();
}
client.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cliente

Publicado por Tom (42 intervenciones) el 27/11/2006 20:53:17
package sockets;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
*
* @author
*/
public class Client {

/** Creates a new instance of Client */
public Client() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String ret;
System.out.println("Starting Client");
try {
Socket client = new Socket(InetAddress.getByName(null), 8080);
BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));
OutputStreamWriter os = new OutputStreamWriter(client.getOutputStream());
for(int i = 0; i < 90; i++) {
os.write("Cliente -> Msg(" + i + ")\n");
os.flush();
ret = is.readLine();
System.out.println("Cliente <- Msg(" + ret + ")");
Thread.sleep(1000);
}
client.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me funciona

Publicado por Oscar (4 intervenciones) el 27/11/2006 23:20:35
gracias por el codigo, pero no consigo saber porque el mio falla, no tenia ningun hilo en el original, pero poniendolo tampo va ya que no entiendo la razon.

en mi main el servidor crea objetos de una clase que contiene el socket.
LinkedList lista_aux=new LinkedList();
while(x>-1)
{
lista_aux.add(new Online(drecord,servidor));
x++;
System.out.println("Se conecto el cliente numero: "+x);
}

en Online el servidor se conecta:
try
{
servidor_dir=new ServerSocket(5004);
System.out.println("ESPERANDO AL CLIENTE");
cliente = servidor_dir.accept();
System.out.println("CLIENTE CONECTADO");
dis=new DataInputStream(cliente.getInputStream());
dos=new DataOutputStream(cliente.getOutputStream());
System.out.println("Link de datos operativo");
}
catch(Exception e){e.printStackTrace();}

en Online el cliente se conecta:
try
{
System.out.println("ESPERANDO AL SERVIDOR "+datos.ip);
cliente=new Socket(datos.ip,5004);
System.out.println("CONECTADO AL SERVIDOR");
dis=new DataInputStream(cliente.getInputStream());
dos=new DataOutputStream(cliente.getOutputStream());
System.out.println("Link de datos operativo");
return true;
}
catch(Exception e){e.printStackTrace();}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No me funciona

Publicado por Tom (1569 intervenciones) el 28/11/2006 07:46:38
¡¡¡ Solo puedes abrir un servidor en un puerto !!!
Parece que tratas de abrir más de un ServerSocket en el mismo puerto 5004 de la misma ip.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar