📄 sender.java
字号:
/*
* Sender.java
*
* Created on 2006年6月2日, 下午10:52
*
* 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.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;
import java.util.concurrent.ScheduledFuture;
/**
*
* @author rongs
*/
public class Sender extends Thread {
/** Creates a new instance of Sender */
public Sender(){
}
Server server ;
public Sender(File src, SocketChannel dst, Server server) {
super("Sender");
this.dst = dst;
remoteAddress = dst.socket().getRemoteSocketAddress();
this.server = server;
buf = ByteBuffer.allocateDirect(200);
line = ByteBuffer.allocateDirect(200);
try {
fileChannel = new FileInputStream(src).getChannel();
long size = fileChannel.size(); size = 0;
fileChannel.position(size);
sleep(500);
fileChannel.read(buf);
buf.flip();
while(buf.get()!=10){
}
position = size + buf.position();
fileChannel.position(position);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
} catch(InterruptedException ex){
ex.printStackTrace();
}
}
public void run() {
try{
buf.clear();
fileChannel.read(buf);
buf.flip();
loop: while((b = buf.get()) != 13 || (b = buf.get()) != 10){
if(b == 32 || b == 69 || b == 78 || b == 44 || b==87 || b==83){
next = true;
continue loop;
}
if(next){
line.put((byte)32);
next = false;
}
line.put(b);
}
if(position < fileChannel.size()){
position += buf.position();
}
fileChannel.position(position);
line.flip();
dst.write(line);
line.clear();
// System.out.println("size "+fileChannel.size());
// System.out.println("position "+fileChannel.position());
}catch(IOException ex){
ex.printStackTrace();
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" + "远程主机"
+ remoteAddress.toString()
+ "强迫关闭了一个现有连接!" + "\n");
}
});
handle.cancel(true);
try {
if(dst != null) {
dst.close();
}
} catch (IOException ex1) {
ex.printStackTrace();
}
}
}
ScheduledFuture<?> handle;
public void setHanlle(ScheduledFuture handle) {
this.handle = handle;
}
private boolean next = false;
private FileChannel fileChannel ;
private ByteBuffer buf, line;
private byte b ;
private SocketChannel dst;
private SocketAddress remoteAddress;
private long position;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -