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

📄 listener.java

📁 模 拟 飞 机 飞 行 服 务 端
💻 JAVA
字号:
/*
 * Listener.java
 *
 * Created on 2006年6月4日, 下午2:29
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package worker;

import flightInfoServer.Server;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 *
 * @author rongs
 */
public class Listener extends Thread {
    
    /** Creates a new instance of Listener */
    public Listener() {
    }
    
    File src;
    int port;
    private int senderPeriod;
    private int maxCon;
    
    public Listener(File src, int port, int senderPeriod, int maxCon, Server server){
        super("Listener");
        this.src = src;
        this.port = port;
        this.senderPeriod = senderPeriod;
        this.maxCon = maxCon;
        this.server = server;
        scheduledExecutorService = new ScheduledThreadPoolExecutor(maxCon);
        try{
            ssc = ServerSocketChannel.open();
            ssc.socket().bind(new InetSocketAddress(port));
            ssc.configureBlocking(true);
//            selector = Selector.open();
//            ssc.register(selector, SelectionKey.OP_ACCEPT);
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
    
    
    ServerSocketChannel ssc;
    
    
    private int conCount;
    public void run(){
        try{
            
            while(true){
//                int count = selector.select();
//                if(count == 0) continue;
//                Iterator it = selector.selectedKeys().iterator();
//                while(it.hasNext()){
//                    SelectionKey key = (SelectionKey)it.next();
//                    if(key.isAcceptable()){
//                        SocketChannel dst = ((ServerSocketChannel)key.channel()).accept();
                
                final SocketChannel dst = ssc.accept();
                conCount++;
                if(conCount <= maxCon){
                    Sender sender = new Sender(src, dst, server);
                    ScheduledFuture<?> handle = scheduledExecutorService.scheduleAtFixedRate(sender, 0, senderPeriod, TimeUnit.MILLISECONDS);
                    sender.setHanlle(handle);
                    java.awt.EventQueue.invokeLater(new Runnable() {
                        public void run() {
                            java.text.DateFormat df = java.text.DateFormat.getDateTimeInstance(java.text.DateFormat.DEFAULT, java.text.DateFormat.DEFAULT);
                            server.serverStatus.append("信息:" + df.format(new java.util.Date(System.currentTimeMillis())) + "\n" +"远程客户端"
                                    + dst.socket().getRemoteSocketAddress().toString()
                                    + "已经连接到服务器!" + "\n");
                        }
                    });
                    
                }else{
                    dst.socket().close();
                }
//                    }
//                }
            }
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
    
    private boolean run = true;
    public void cancel(){
        run = false;
//        try {
//            ssc.close();
//        } catch (IOException ex) {
//            ex.printStackTrace();
//        }
    }
    
    private ScheduledThreadPoolExecutor scheduledExecutorService;
    private Server server;
}

⌨️ 快捷键说明

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