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

📄 niodatagramconnector.java

📁 mina是以Java实现的一个开源的网络程序框架
💻 JAVA
字号:
/* *  Licensed to the Apache Software Foundation (ASF) under one *  or more contributor license agreements.  See the NOTICE file *  distributed with this work for additional information *  regarding copyright ownership.  The ASF licenses this file *  to you under the Apache License, Version 2.0 (the *  "License"); you may not use this file except in compliance *  with the License.  You may obtain a copy of the License at * *    http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, *  software distributed under the License is distributed on an *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *  KIND, either express or implied.  See the License for the *  specific language governing permissions and limitations *  under the License. * */package org.apache.mina.transport.socket.nio;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.channels.DatagramChannel;import java.util.Collections;import java.util.Iterator;import java.util.concurrent.Executor;import org.apache.mina.core.polling.AbstractPollingIoConnector;import org.apache.mina.core.service.IoConnector;import org.apache.mina.core.service.IoProcessor;import org.apache.mina.core.service.TransportMetadata;import org.apache.mina.transport.socket.DatagramConnector;import org.apache.mina.transport.socket.DatagramSessionConfig;import org.apache.mina.transport.socket.DefaultDatagramSessionConfig;/** * {@link IoConnector} for datagram transport (UDP/IP). * * @author The Apache MINA Project (dev@mina.apache.org) * @version $Rev: 751514 $, $Date: 2009-03-08 21:17:47 +0100 (Sun, 08 Mar 2009) $ */public final class NioDatagramConnector        extends AbstractPollingIoConnector<NioSession, DatagramChannel>        implements DatagramConnector {    /**     * Creates a new instance.     */    public NioDatagramConnector() {        super(new DefaultDatagramSessionConfig(), NioProcessor.class);    }    /**     * Creates a new instance.     */    public NioDatagramConnector(int processorCount) {        super(new DefaultDatagramSessionConfig(), NioProcessor.class, processorCount);    }    /**     * Creates a new instance.     */    public NioDatagramConnector(IoProcessor<NioSession> processor) {        super(new DefaultDatagramSessionConfig(), processor);    }        /**     * Constructor for {@link NioDatagramConnector} with default configuration which will use a built-in      * thread pool executor to manage the given number of processor instances. The processor class must have      * a constructor that accepts ExecutorService or Executor as its single argument, or, failing that, a      * no-arg constructor.     *      * @param processorClass the processor class.     * @param processorCount the number of processors to instantiate.     * @see org.apache.mina.core.service.SimpleIoProcessorPool#SimpleIoProcessorPool(Class, Executor, int)     * @since 2.0.0-M4     */    public NioDatagramConnector(Class<? extends IoProcessor<NioSession>> processorClass,			int processorCount) {		super(new DefaultDatagramSessionConfig(), processorClass, processorCount);	}    /**     * Constructor for {@link NioDatagramConnector} with default configuration with default configuration which will use a built-in      * thread pool executor to manage the default number of processor instances. The processor class must have      * a constructor that accepts ExecutorService or Executor as its single argument, or, failing that, a      * no-arg constructor. The default number of instances is equal to the number of processor cores      * in the system, plus one.     *      * @param processorClass the processor class.     * @see org.apache.mina.core.service.SimpleIoProcessorPool#SimpleIoProcessorPool(Class, Executor, int)     * @see org.apache.mina.core.service.SimpleIoProcessorPool#DEFAULT_SIZE     * @since 2.0.0-M4     */	public NioDatagramConnector(Class<? extends IoProcessor<NioSession>> processorClass) {		super(new DefaultDatagramSessionConfig(), processorClass);	}	public TransportMetadata getTransportMetadata() {        return NioDatagramSession.METADATA;    }        @Override    public DatagramSessionConfig getSessionConfig() {        return (DatagramSessionConfig) super.getSessionConfig();    }        @Override    public InetSocketAddress getDefaultRemoteAddress() {        return (InetSocketAddress) super.getDefaultRemoteAddress();    }        public void setDefaultRemoteAddress(InetSocketAddress defaultRemoteAddress) {        super.setDefaultRemoteAddress(defaultRemoteAddress);    }    @Override    protected void init() throws Exception {    }    @Override    protected DatagramChannel newHandle(SocketAddress localAddress)            throws Exception {        DatagramChannel ch = DatagramChannel.open();        try {            if (localAddress != null) {                ch.socket().bind(localAddress);            }                        return ch;        } catch (Exception e) {            // If we got an exception while binding the datagram,            // we have to close it otherwise we will loose an handle            ch.close();            throw e;        }    }    @Override    protected boolean connect(DatagramChannel handle,            SocketAddress remoteAddress) throws Exception {        handle.connect(remoteAddress);        return true;    }    @Override    protected NioSession newSession(IoProcessor<NioSession> processor,            DatagramChannel handle) {        NioSession session = new NioDatagramSession(this, handle, processor);        session.getConfig().setAll(getSessionConfig());        return session;    }    @Override    protected void close(DatagramChannel handle) throws Exception {        handle.disconnect();        handle.close();    }        // Unused extension points.    @Override    @SuppressWarnings("unchecked")    protected Iterator<DatagramChannel> allHandles() {        return Collections.EMPTY_LIST.iterator();    }    @Override    protected ConnectionRequest getConnectionRequest(DatagramChannel handle) {        throw new UnsupportedOperationException();    }    @Override    protected void destroy() throws Exception {    }    @Override    protected boolean finishConnect(DatagramChannel handle) throws Exception {        throw new UnsupportedOperationException();    }    @Override    protected void register(DatagramChannel handle, ConnectionRequest request)            throws Exception {        throw new UnsupportedOperationException();    }    @Override    protected int select(int timeout) throws Exception {        return 0;    }    @Override    @SuppressWarnings("unchecked")    protected Iterator<DatagramChannel> selectedHandles() {        return Collections.EMPTY_LIST.iterator();    }    @Override    protected void wakeup() {    }}

⌨️ 快捷键说明

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