Newsgroup: it.comp.java
Titolo: Socket e numero di connessioni

Sto realizzando un'applicazione basata sui socket e mi è venuto il seguen-
te dubbio: è possibile che allo stesso ServerSocket si attacchino più
client in modo che quando il server invia qualcosa tutti i client lo
ricevano? E poi i client possono trasmettere su tale connessione? Per il
server non fa alcuna differenza chi trasmette, basta che i dati arrivino
ordinati e non mischiati.
-- 
Windows? Pessimismo e digusto.


Perchè no? Il metodo accept() di ServerSocket ti ritorna il Socket che
si è agganciato. Quindi potresti fare qualcosa del tipo
public class MyServer implements Runnable {
	ServerSocket ss;
	public MyServer() {
		ss = new ServerSocket(...);
	}
	public void run() {
		/* Fai partire il server in modo che accetti una connessione */
		Socket s = myServerSocket.accept();
		/* Lanci un altro thread, che si metterà in ascolto */
		run();
		/* Fai quel che devi fare con il socket che si è connesso */
		/* Potresti per esempio anche buttarlo in un vettore di socket */
		/* ... */
	}
	public static void main() {
	MyServer m = new MyServer();
	m.run();
	}
}
Siccome è un po' di tempo che non spippolo con in server socket (anche
se ora mi ci devo rimettere), mi scuso per le imprecisioni. Tra
parentesi devi anche trappare tutte le possibili eccezioni.
Ciao,
	Stefano

Ups...
nel main() intendevo m.start() e non m.run()
Ciao,
	Stefano

 Windows? Pessimismo e digusto.
Le informazioni che riporti sono veramente poche, quello che tu chiedi è
possibile in due modi:
1) Serversocket multiutente basato su TCP (Necessaria connessione)
2) Meccanismo di broadcasting usando UDP (protocollo connectionless)
Puoi fornire altre info?
Massimiliano TArquini

 ordinati e non mischiati.
Su due piedi :), se intendi il broadcast dei pacchetti, e' un opzione solo
su UDP - TCP e' un protocollo a connessione, end-to-end e se vuoi puoi
emulare un broadcast rinviando separatamente le informazioni a livello
applicativo - il che ovviamente implica payload uguale (o simile) ma su
pacchetti IP diversi.
C'e' anche l'IP multicasting basato su reti di classe D e l'aggregazione in
gruppi (controllato con IGMP, se non ricordo male l'internet group
management protocol) ma ovviamente devi intervenire a livello di routing,
che non credo sia quello che intendi tu.
Dovrei rispolverare il mio "internetworking with tcp/ip" per ricordare i
dettagli - sto passando troppo tempo con UML ultimamente. :(

 Puoi fornire altre info?
Allora, di base il server deve spedire delle stringhe a tutti i client.
Vorrei fare in modo che, senza dover creare un ServerSocket per ogni
client, tutti i client si colleghino allo stesso ServerSocket, in modo
che basti un solo output da parte del server per far arrivare la stringa
a tutti i client.
Allo stesso modo, magari su un altro socket come il precedente con il
server e tutti i client attaccati, vorrei fare in modo che il server sia
in grado di leggere le stringhe che vengono passate dai client. Non ha
importanza sapere quale client sia, basta che arrivi il dato.
Pensavo di realizzarlo attraverso il TCP, visto che tutti i pc su cui
deve funzionare sono connessi in rete attraverso TCP/IP, non conosco
il metodo UDP.
Che differenza ha un ServerSocket multiutente da uno monoutente?
