jjzjj

java - 通过蓝牙 RDP

coder 2023-12-06 原文

这是一个研发项目。通过蓝牙将 Windows PC 的桌面传输到手机。我成功地将桌面以 720p 流式传输到我的 Android 手机,但问题是我无法进行直播。通过蓝牙传输的编码和数据需要几毫秒,所以它不是实时的。所以我做了什么,为此我选择了 RDP。由于 RDP 仅适用于 LAN。我没有 PAN 的资料。我写了一个代理,它只通过蓝牙将 RDP 数据包从本地主机路由到我的计算机。在计算机端有另一个程序正在运行,它从蓝牙获取数据并将此数据发送到本地主机端口 3389。现在我面临的问题是,随着连接的启动,套接字会自行关闭。程序最初只读取80或45个字节,然后出现异常“Socket Closed”。我的问题是,RDP 是打开和关闭 session 的套接字,还是第一次连接然后使用该套接字。因为我是这个 RDP 的新手。建议我一些关于 RDP 的话题。非常感谢任何帮助。

问候 月仔

更新:

我正在使用以下代码读取和写入蓝牙和套接字。

  class ReadWrite implements Runnable {

    private String name;

    private Thread thread;
    private InputStream is;
    private OutputStream os;

    private volatile boolean start = false;

    public ReadWrite(String name, InputStream is, OutputStream os) {
        this.name = name;
        this.is = is;
        this.os = os;
        thread = new Thread(this);
    }

    public void startThread() {
        start = true;
        thread.start();
    }

    public void stopThread() {
        start = false;
        try {
            if (is != null) {
                is.close();
            }

            if (os != null) {
                os.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        System.out.println(name + " ReadWrite Started");

        byte[] buffer = new byte[8092];
        int read;

        while (start) {
            try {
                read = is.read(buffer);
                System.out.println(name + " Read: " + read);
                if (read > 0) {
                    os.write(buffer, 0, read);
                    os.flush();
                }
            } catch (Exception e) {
                e.printStackTrace();
                break;
            }
        }

        System.out.println(name + " ReadWrite Stopped");
    }
}

我正在启动此线程的 2 个实例,例如:

  ReadWrite bt2net = new ReadWrite("bt2net", btis, netos);
  ReadWrite net2bt = new ReadWrite("net2bt", netis, btos);
  bt2net.startThread();
  net2bt.startThread();

其中 btisnetosnetisbtosInputStream输出流。这个类在Android和PC端都有使用。 PC 端以 -1 的读取长度运行,而 Android 端给我这个异常:

  java.net.SocketException: Socket closed
  java.io.IOException: bt socket closed, read return: -1

我不知道这是怎么回事,为什么会这样。请说明 RDP 低级别,因为我没有找到任何有用的信息。

最佳答案

是的,看起来 RDP 在连接时会打开和关闭套接字。我刚刚对从 Windows Vista 计算机到 Windows Server 2003 R2 服务器的 RDP 连接进行了数据包捕获,并且有两个 TCP 流。第一个 TCP 流由 19 个字节组成,然后以另一种方式返回 19 个字节,类似于您的描述。一秒钟后,建立另一个 TCP 连接,并持续 session 的长度。

祝你的项目好运!

关于java - 通过蓝牙 RDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25480915/

有关java - 通过蓝牙 RDP的更多相关文章

  1. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  2. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  3. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  4. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  5. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  6. ruby-on-rails - Enumerator.new 如何处理已通过的 block ? - 2

    我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m

  7. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  8. 通过 MacPorts 的 RubyGems 是个好主意吗? - 2

    从MB升级到新的MBP后,Apple的迁移助手没有移动我的gem。我这次是通过macports安装ruby​​gems,希望在下次升级时避免这种情况。有什么我应该注意的陷阱吗? 最佳答案 如果你想把你的gems安装在你的主目录中(在传输过程中应该复制过来,作为一个附带的好处,会让你以你自己的身份运行geminstall,而不是root),将gemhome:键设置为您在~/.gemrc中的主目录中的路径. 关于通过MacPorts的RubyGems是个好主意吗?,我们在StackOverf

  9. ruby - 通过 RVM 安装 Ruby 1.9.2 永远行不通! - 2

    当我执行>rvminstall1.9.2时一切顺利。然后我做>rvmuse1.9.2也很顺利。但是当涉及到ruby​​-v时..sam@sjones:~$rvminstall1.9.2/home/sam/.rvm/rubies/ruby-1.9.2-p136,thismaytakeawhiledependingonyourcpu(s)...ruby-1.9.2-p136-#fetchingruby-1.9.2-p136-#downloadingruby-1.9.2-p136,thismaytakeawhiledependingonyourconnection...%Total%Rece

  10. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

随机推荐