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

标签 java file sockets callback server

如何添加到发送队列,例如我使用 JFileChooser 选择一个文件,然后在新线程中将其发送到客户端,我想选择另一个文件并将其发送。发生的情况是它同时发送文件并且客户端的输出被破坏。

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

最佳答案

服务器->客户端之间套接字通信的一个好方法是每个客户端有1个线程,并让该线程从java.util.concurrent.BlockingQueue读取。这样的接口(interface)非常适合管理多线程并发性(就像所有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;
}

并通过向线程对象添加任务来使用它:

        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 信息存储在线程中,并将其传递给任务接口(interface)。

关于java - 在java回调中发送多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27827264/

相关文章:

java - 如何将 google 身份验证 token (在 iOS 中获得)传递到 google-app-engine Web servlet?

java - 从整数列表的索引中打印字符串

Python 3.3 需要有关非常简单的初学者代码的帮助

c++ - 如何在预处理时读取文件

sockets - 使用 socket.io 连接 Elixir 的 Phoenix Sockets

Java - 无法与 ServerSocket 连接

java - 单例如何隐藏其依赖关系?

java - 在java中用null填充ArrayList的最快方法是什么?

C : text file, 字符串比较等

linux - 找出哪个用户在应用程序内部创建了本地传入 TCP 连接