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

📄 sender.java

📁 模 拟 飞 机 飞 行 服 务 端
💻 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 + -