Ich bin neu in der Socket-Programmierung in Java und versuchte zu verstehen, ob der folgende Code nicht falsch ist. Meine Frage ist:Java-Sockets: Mehrere Client-Threads am gleichen Port auf demselben Rechner?
Kann ich mehrere Clients auf jedem Thread habe versucht, auf eine Server-Instanz im gleichen Programm zu verbinden und erwarten, dass der Server zum Lesen und Schreiben von Daten mit Isolation zwischen Clients“
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));
}
}
Jetzt können ich habe mehrere Client-Instanzen auf verschiedenen Threads versuchen, auf dem gleichen Port der aktuellen Maschine?
zum Beispiel zu verbinden,
Server s = new Server("localhost", 1234);
s.start();
Client[] c = new Client[10];
for (int i = 0; i < c.length; ++i)
{
c.start();
}
Danke Jungs versuchen können, dachte ich an den Port als eine einzige physische Einheit (wie ein Draht), da es eine einzige Nummer. Also mein Gedanke war, dass es nur von einem Client-Socket genutzt werden kann, sonst könnten mehrere Client-Sockets gleichzeitig in die gleiche Leitung schreiben. Aber von Ihren Antworten denke ich, dass der Port selbst aus mehreren Ressourcen besteht (etwa wie Speicherblöcke), aber der Socket wird an einen dieser Blöcke gebunden, die wahrscheinlich durch einen Binding Key indiziert sind. – espcorrupt
Der Port ist nur eine Nummer. Es entspricht nichts Physischem. Eine * Verbindung * wird durch das Tupel {Protokoll, Quelladresse, Quellport, Zieladresse, Zielport} definiert. Das clientseitige Betriebssystem sorgt dafür, dass für jede ausgehende Verbindung verschiedene ausgehende Portnummern bereitgestellt werden. Es ist also kein Problem, mehrere eingehende Verbindungen zum selben Zielhost/-port zu haben, auch wenn sie alle vom selben Client-Quellhost stammen. – EJP