# ServerSocket.accept Rückgabetyp casten



## Thrill (11. Jul 2012)

Hi,

Ich schreibe gerade an einer Erweiterung der ServerSocket und Socket Objekte, die es ermöglicht asynchron Verbindungen zu akzeptieren und Daten zu schreiben und zu empfangen. Dafür habe ich zwei Objekte geschrieben, die von ServerSocket bzw. Socket erben, und die Methode beginAccept in meine neue ServerSocket-Klasse implementiert und versucht accept zu überschreiben.

Die accept und beginAccept Methoden sollen aber kein java.net.Socket Objekt, sondern mein net.async.Socket Objekt zurückliefern. Die super.accept Methode liefert das allerdings nicht und casten kann ich es auch nicht.

Ich würde das gerne ohne einen Wrapper realisieren. Vorschläge?

Vielen Dank im voraus.


----------



## Lumaraf (11. Jul 2012)

Das klingt für mich erstmal danach als ob du etwas implementieren möchtest was java.nio.channels.ServerSocketChannel bzw java.nio.channels.AsynchronousServerSocketChannel bereits anbieten. Wofür genau brauchst du die Methoden unbedingt auf dem Socket?


----------



## Gast2 (12. Jul 2012)

Moin,

ein net.async.Socket ist ein Socket - aber - ein Socket ist KEIN net.async.Socket.

Du bekommst eine Instanz von Socket zurück un die kann man nicht casten - ein Socket ist ein Socket und bleibt ein Socket. Das einzige was Du machen kannst ist Dein net.async.Socket als Wrapper umbauen dem Du bei der Instanz den Socket übergibst. Dann kannst Du intern alles auf den Socket umbiegen und von außen hast Du Dein net.async.Socket.

hand, mogel


----------



## Thrill (12. Jul 2012)

Lumaraf hat gesagt.:


> Das klingt für mich erstmal danach als ob du etwas implementieren möchtest was java.nio.channels.ServerSocketChannel bzw java.nio.channels.AsynchronousServerSocketChannel bereits anbieten. Wofür genau brauchst du die Methoden unbedingt auf dem Socket?



Hauptsächlich um mich daran zu probieren.



mogel hat gesagt.:


> Moin,
> 
> ein net.async.Socket ist ein Socket - aber - ein Socket ist KEIN net.async.Socket.
> 
> ...



Ich habe tatsächlich eine Möglichkeit gefunden. Es gibt die Methode java.net.ServerSocket.implAccept(Socket s) der man ein leeres von java.net.Socket abgeleitetes Objekt übergeben kann, dass dann verbunden wird.


----------

