📄 listener.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 + -