Sono nuovo alla programmazione Socket in Java e stavo cercando di capire se il codice sottostante non è una cosa sbagliata da fare. La mia domanda è:Prese Java: più thread client sulla stessa porta sulla stessa macchina?
Posso avere più client su ogni thread tenta di connettersi a un'istanza del server nello stesso programma e si aspettano il server per leggere e scrivere dati con isolamento tra i clienti"
public class Client extends Thread
{
...
void run()
{
Socket socket = new Socket("localhost", 1234);
doIO(socket);
}
}
public class Server extends Thread
{
...
void run()
{
// serverSocket on "localhost", 1234
Socket clientSock = serverSocket.accept();
executor.execute(new ClientWorker(clientSock));
}
}
Ora può ho istanze client multipli su diversi thread cercando di collegare sulla stessa porta della macchina attuale?
per esempio,
Server s = new Server("localhost", 1234);
s.start();
Client[] c = new Client[10];
for (int i = 0; i < c.length; ++i)
{
c.start();
}
Grazie ragazzi, ho pensato al porto come una singola entità fisica (come un filo) dal momento che ha un unico numero. Quindi il mio pensiero è che può essere utilizzato da un solo socket client, altrimenti più socket client potrebbero scrivere nello stesso filo alla volta. Ma dalle tue risposte, penso che la porta stessa sia composta da più risorse (ad esempio, come blocchi di memoria), ma il socket sarà associato a uno di quei blocchi probabilmente indicizzati da una chiave di associazione. – espcorrupt
La porta è solo un numero. Non corrisponde a nulla di fisico. Una * connessione * è definita dalla tupla {protocollo, indirizzo di origine, porta di origine, indirizzo di destinazione, porta di destinazione}. Il sistema operativo sul lato client si occuperà di garantire numeri di porta in uscita diversi per ciascuna connessione in uscita. Quindi non vi è alcun problema nel disporre di più connessioni in entrata allo stesso host/porta di destinazione, anche se provengono tutte dallo stesso host di origine client. – EJP