这是一个研发项目。通过蓝牙将 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();
其中 btis
、netos
、netis
和 btos
是 InputStream
和 输出流
。这个类在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/