⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxmultiserver.java

📁 用Java写的面相对象的数据库管理系统
💻 JAVA
字号:
// You can redistribute this software and/or modify it under the terms of// the Ozone Library License version 1 published by ozone-db.org.//// The original code and portions created by SMB are// Copyright (C) 1997-2000 by SMB GmbH. All rights reserved.//// $Id: DxMultiServer.java,v 1.9 2000/10/28 16:55:15 daniela Exp $package org.ozoneDB.DxLib.net;import java.io.*;import java.net.*;import org.ozoneDB.DxLib.*;/** * DxMultiServer verwaltet mehrere DxClients - Verbindungen. Durch einen Thread * wird staendig auf neue Verbindungen gewartet, durch einen weiteren auf * einkommende Daten. Wird etwas empfangen, wird die Methode handleClientEvent() * aufgerufen. *  *  * @author <a href="http://www.softwarebuero.de/">SMB</a> * @version $Revision: 1.9 $Date: 2000/10/28 16:55:15 $ */public abstract class DxMultiServer extends DxListBag {        protected ServerSocket serverSocket;        protected Acceptor acceptor;        protected Thread acceptThread;        protected ThreadGroup threadGroup;            public DxMultiServer( int port ) throws IOException{        serverSocket = new ServerSocket( port );        acceptor = new Acceptor( this );        threadGroup = new ThreadGroup( getClass().getName() );        acceptThread = newThread( acceptor );    }            /**     * liefert die ThreadGroup des MultiServers.     */    public ThreadGroup threadGroup() {        return threadGroup;    }             /**     * Diese Methode liefert einen neuen Thread und wird fuer die AcceptThread     * und den DxMultiServerClient benoetigt. Sie kann ueberschrieben werden, um evtl.     * eigene Threads zu erzeugen (z.B. bei Verwendung eines eigenen Schedulers).     * Ausserdem wird der mit diesem Thread verbundene Client uebergeben (kann     * auch null sein !!).     */    public Thread newThread( Runnable run ) {        return new Thread( threadGroup(), run );    }             /**     * erzeugt einen neuen client aus einer socket-verbindung;     * diese methode kann ueberschrieben werden, um evtl. eigene clients     * einfuegen zu koennen     */    public synchronized DxMultiServerClient newClient( Socket sock ) {        try {            return new DxMultiServerClient( sock, this );        } catch (Exception e) {            return null;        }     }             /** accept thread starten */    public void accept() {        if (!acceptThread.isAlive()) {            acceptThread.start();        }     }             public void close() throws IOException {        acceptThread.stop();        DxIterator it = iterator();        while (it.next() != null) {            ((DxMultiServerClient)it.object()).close();        }         serverSocket.close();    }             public synchronized void removeClient( DxMultiServerClient client ) {        DxIterator it = iterator();        DxMultiServerClient cl;        while ((cl = (DxMultiServerClient)it.next()) != null) {            if (cl == client) {                it.removeObject();                cl.close();                return;            }         }         throw new RuntimeException( "removeClient(): no such client." );    }             /**     * diese methode wird aufgerufen, wenn an der verbindung client daten     * anliegen; muss ueberschrieben werden, um das applications spezifische     * verhalten zu bestimmen     */    public abstract void handleClientEvent( DxMultiServerClient client, Object event );            public abstract void handleClientException( DxMultiServerClient client, Exception e );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -