Java 通过蓝牙实现RDP
这是一个研发项目。通过蓝牙将Windows PC的桌面传输到手机。我成功地用720p将桌面数据流传输到我的Android手机上,但问题是我无法获得实时数据流。通过蓝牙进行编码和数据传输需要几毫秒的时间,所以它不是实时的。所以我选择了RDP来做这个。因为RDP仅为LAN构建。我没有潘的个人资料。我编写了一个代理,它只通过蓝牙将RDP数据包从本地主机路由到我的计算机。在计算机端有另一个正在运行的程序,它从蓝牙获取数据并将这些数据发送到本地主机端口3389。现在我面临的问题是,当连接启动时,套接字会自动关闭。程序最初只读取80或45字节,然后出现异常“套接字关闭”。我的问题是,RDP是为会话打开和关闭套接字,还是第一次连接然后使用该套接字。因为我对RDP这件事还不熟悉。建议我一些关于RDP的话题。非常感谢您的帮助 问候 月亮仔 更新: 我使用以下代码在蓝牙和套接字之间进行读写操作Java 通过蓝牙实现RDP,java,android,sockets,bluetooth,rdp,Java,Android,Sockets,Bluetooth,Rdp,这是一个研发项目。通过蓝牙将Windows PC的桌面传输到手机。我成功地用720p将桌面数据流传输到我的Android手机上,但问题是我无法获得实时数据流。通过蓝牙进行编码和数据传输需要几毫秒的时间,所以它不是实时的。所以我选择了RDP来做这个。因为RDP仅为LAN构建。我没有潘的个人资料。我编写了一个代理,它只通过蓝牙将RDP数据包从本地主机路由到我的计算机。在计算机端有另一个正在运行的程序,它从蓝牙获取数据并将这些数据发送到本地主机端口3389。现在我面临的问题是,当连接启动时,套接字会自
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连接被建立,这将持续会话的长度
祝你的项目好运 伟大的工作,顺便说一句,该项目:)