Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过蓝牙实现RDP_Java_Android_Sockets_Bluetooth_Rdp - Fatal编程技术网

Java 通过蓝牙实现RDP

Java 通过蓝牙实现RDP,java,android,sockets,bluetooth,rdp,Java,Android,Sockets,Bluetooth,Rdp,这是一个研发项目。通过蓝牙将Windows PC的桌面传输到手机。我成功地用720p将桌面数据流传输到我的Android手机上,但问题是我无法获得实时数据流。通过蓝牙进行编码和数据传输需要几毫秒的时间,所以它不是实时的。所以我选择了RDP来做这个。因为RDP仅为LAN构建。我没有潘的个人资料。我编写了一个代理,它只通过蓝牙将RDP数据包从本地主机路由到我的计算机。在计算机端有另一个正在运行的程序,它从蓝牙获取数据并将这些数据发送到本地主机端口3389。现在我面临的问题是,当连接启动时,套接字会自

这是一个研发项目。通过蓝牙将Windows PC的桌面传输到手机。我成功地用720p将桌面数据流传输到我的Android手机上,但问题是我无法获得实时数据流。通过蓝牙进行编码和数据传输需要几毫秒的时间,所以它不是实时的。所以我选择了RDP来做这个。因为RDP仅为LAN构建。我没有潘的个人资料。我编写了一个代理,它只通过蓝牙将RDP数据包从本地主机路由到我的计算机。在计算机端有另一个正在运行的程序,它从蓝牙获取数据并将这些数据发送到本地主机端口3389。现在我面临的问题是,当连接启动时,套接字会自动关闭。程序最初只读取80或45字节,然后出现异常“套接字关闭”。我的问题是,RDP是为会话打开和关闭套接字,还是第一次连接然后使用该套接字。因为我对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");
    }
}
我将启动此线程的两个实例,如下所示:

  ReadWrite bt2net = new ReadWrite("bt2net", btis, netos);
  ReadWrite net2bt = new ReadWrite("net2bt", netis, btos);
  bt2net.startThread();
  net2bt.startThread();
其中,
bti
netos
netis
bto
InputStream
OutputStream
。这个类在Android和PC上都使用。PC端运行时读取长度为-1,而Android端给了我一个例外:

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

我不知道发生了什么以及为什么。请在RDP低电平上亮一些灯,因为我没有找到任何有用的信息。

是的,看起来RDP在连接时会打开和关闭插座。我刚刚捕获了一个从WindowsVista计算机到WindowsServer2003R2服务器的RDP连接的数据包,有两个TCP流。第一个TCP流以一种方式由19个字节组成,然后以另一种方式由19个字节组成,类似于您所描述的。一秒钟后,另一个TCP连接被建立,这将持续会话的长度


祝你的项目好运

伟大的工作,顺便说一句,该项目:)