在java回调中发送多个文件?

时间:2015-01-07 19:36:25

标签: java file sockets callback server

如何添加到发送队列,例如我选择带有JFileChooser的文件,然后将其以新线程发送到客户端,我想选择另一个并发送它。会发生什么是它同时发送文件并且客户端的输出被破坏。

我希望能够添加某种“队列”,以便在发送第一个文件时,服务器将开始发送下一个文件。

1 个答案:

答案 0 :(得分:1)

服务器 - >客户端之间socket communication的良好方法是每个客户端有1个线程,并且从java.util.concurrent.BlockingQueue读取此线程。这样的接口是理想的(就像所有 java.util.concurrent 对象一样),用于管理多线程并发。

这个想法是服务器有这样的ClientThread

class BroadCastThread extends Thread{
    LinkedBlockingQueue<SendFileTask> bcQueue = new LinkedBlockingQueue<>();
    @Override
    public void run() {
        while( true ){
            try {
                SendFileTask task = bcQueue.take();
                task.sendFile();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    void addTask(SendFileTask rt) throws InterruptedException{
        bcQueue.put(rt);
    }
}
interface SendFileTask{
    void sendFile() throws Exception;
}

并通过adding tasks使用此线程对象:

        BroadCastThread bct = new BroadCastThread();
        bct.start();

        //With lambda
        bct.addTask(() -> {
            //Send file code
        });

        //Without lambda
        bct.addTask(new SendFileTask() {
            @Override
            void sendFile() throws Exception {
            //Send file code
            }
        });

如果您希望sendFile方法将其作为参数接收,您甚至可以将Socket信息与线程一起存储,然后传递它抛出任务界面。