View Full Version : [JAVA]classe ServerSocket
Frank1962
14-02-2004, 18:51
come faccio, utilizzando la classe ServerSocket, ad "ascoltare" su + porte senza dover avviare + volte il singolo programma ?
...ho provato utilizzando i thread e non ma il metodo server.accept(); che serve ad accettare le connessioni in ingresso mi blocca il ciclo for per la creazione dei thread al primo e si mette subito in attesa! :( :muro:
hai già trovato la soluzione, devi utilizzare i thread
probabilmente lo hai fatto nel modo sbagliato
Frank1962
14-02-2004, 19:59
Originariamente inviato da recoil
hai già trovato la soluzione, devi utilizzare i thread
probabilmente lo hai fatto nel modo sbagliato
....può essere, i thread non li ho mai digeriti molto bene... cmq:
package servlet;
public class mainClass {
static Thread[] tcpServer = new Server[3];
public static void main(String[] args) throws Exception {
for(int i=28000; i<28003;i++) {
tcpServer[i-28000] = new Server(i);
tcpServer[i-28000].start();
System.out.println(i); // <-- ciclo bloccato, infatti il println non viene eseguito
}
}
}
package servlet;
import java.net.*;
import java.io.*;
public class Server extends Thread {
int port;
public Server(int port) {
System.out.println(port);
this.port = port;
setDaemon(true);
try {
ServerSocket server = new ServerSocket(port);
// la accept e' bloccante fino all'arrivo di una connessione
Socket s = server.accept();
System.out.println("... accepted:"+s);
InputStream i=s.getInputStream();
OutputStream o=s.getOutputStream();
System.out.println(port);
while(true) {
int c = i.read();
System.out.print((char)c);
o.write(c);
}
} catch(Exception e) { e.printStackTrace(); System.out.println(e); }
}
}
...se provi ad avviare vedrai che viene creato soltanto un ServerSocket e poi si blocca in attesa, se provi poi a togliere tutto quello che riguarda il "Socket s = server.accept();" vedrai che il ciclo viene eseguito completamente!
package servlet;
import java.net.*;
import java.io.*;
public class Server extends Thread {
int port;
public Server(int port) {
System.out.println(port);
this.port = port;
setDaemon(true);
}
public void run() {
try {
ServerSocket server = new ServerSocket(port);
// la accept e' bloccante fino all'arrivo di una connessione
Socket s = server.accept();
System.out.println("... accepted:"+s);
InputStream i=s.getInputStream();
OutputStream o=s.getOutputStream();
System.out.println(port);
while(true) {
int c = i.read();
System.out.print((char)c);
o.write(c);
}
} catch(Exception e) {
e.printStackTrace(); System.out.println(e);
}
}
}
Il metodo "start()" chiama per definizione "run". Così dovrebbe andare.
Frank1962
14-02-2004, 20:35
Originariamente inviato da PGI
Il metodo "start()" chiama per definizione "run". Così dovrebbe andare.
thankS! :D
ps: ....sai mica se è possibile mandare singoli Bit con i socket del java? :confused:
Che io sappia, non si può.
Frank1962
14-02-2004, 20:46
Originariamente inviato da PGI
Che io sappia, non si può.
:sfig: .....strano però, sarebbe utile poter usare i valori booleani: sopratutto quando si parla di applicazioni enterprise!
C'è qualcosa che mi sfugge.
Vuoi mandare un bit o vuoi mandare un boolean?
Frank1962
14-02-2004, 23:42
Originariamente inviato da PGI
C'è qualcosa che mi sfugge.
Vuoi mandare un bit o vuoi mandare un boolean?
be in teoria sarebbe uguale ........cmq un boolean ;)
ps: però mi piacerebbe sapere "come" viene mandato .....se come bit o come byte ;)
La rappresentazione interna di un boolean in Java è un intero (il tipo non è specificato).
La classe DataOutputStream permette di inviare boolean, che vengono "impacchettati" in byte (1 boolean = 1 byte).
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.