ServerSocket - how zu behalten client-socket-id
Habe ich versucht zu erweitern Socket-Objekt so etwas wie...
public class TestSocket extends Socket
{
private String id=String.valueOf(Math.random());
...
public void setId(String id){this.id=id;}
public String getId(){return this.id;}
}
init...
TestSocket testSocket = new TestSocket(SERVER_HOSTNAME, SERVER_PORT);
Als ich es sehen kann, der server-Seite ServerSocket-standard-code wie ein
TestSocket mySocket = (TestSocket) serverSocket.accept();
... nach docs accept () - Methode re-inits socket-Objekts und gibt ein neues ein, so dass der id-Wert ist nicht die des Clients, sondern regeneriert ein 🙁
Ist es möglich, eine client-id? Wenn ja, dann wie?
InformationsquelleAutor user592704 | 2012-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, der line
wirft
ClassCastException
seitjava.io.ServerSocket.accept()
gibt eine Instanz der KlasseSocket
, nichtTestSocket
(es sei denn, Sie erbte von ServerSocket).Werden Sie wahrscheinlich haben, senden Sie die ID über die Verbindung und legen Sie es auf der Empfängerseite, wenn Sie wollen, verbinden Sie die zwei buchsen, wie:
Einer Ihrer beiden Prüfbuchsen nennen würde, die eine Methode und die andere die andere.
Ich würde nicht, jedoch, Erben von der Socket-Klassen zu führen, aber behandeln Sie diese auf einer höheren Ebene.
... aber die accept () - Methode ist eine echte badluck. ID senden über Verbindung? Was meinst du?
Ich möchte bearbeitete meinen post nach deinem Kommentar.
Ich denke, es ist eine interessante Möglichkeit 🙂 Aber ist es möglich zu vermeiden, die post-Identifikation?
InformationsquelleAutor Matt
Eine Sache, die Sie tun können, ist zu halten Sie Ihre Steckdosen in eine Datenstruktur, dh. eine Karte.
Konnte Sie geben ein gutes Beispiel für einen Codeausschnitt der "Map" mit Weg?
InformationsquelleAutor John Kane
Zurückgegebener Wert
getRemoteSocketAddress()
von der akzeptierte socket ist einzigartig (weil die clients müssen unterschiedliche IP-Adressen oder verschiedene ports innerhalb der gleichen IP-Adresse). Das ist alles, was Sie brauchen.InformationsquelleAutor user207421