这是一个R& D项目。通过蓝牙将Windows PC的桌面流式传输到手机上。我成功将桌面流式传输到我的Android手机720p,但问题是我无法获得直播。通过蓝牙进行编码和数据需要几毫秒,所以它不是那么活。所以我做了什么,我为此选择了RDP。由于RDP仅适用于LAN。我没有PAN的个人资料。我写了一个代理,它只通过蓝牙将RDP数据包从localhost路由到我的电脑。在计算机端,还有另一个程序正在运行,该程序从蓝牙获取数据并将此数据发送到localhost端口3389.现在我面临的问题是,当连接启动时,套接字会自行关闭。程序最初只读取80或45个字节,然后发生异常“Socket Closed”。我的问题是,RDP是否为会话打开和关闭套接字,或者是第一次连接然后使用该套接字。因为我是这个RDP的新手。建议我一些关于RDP的话题。任何帮助都非常感谢。
问候 Moonzai
更新:
我正在使用以下代码来读写蓝牙和套接字。
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
和OutputStream
。此类用于Android和PC两侧。 PC端的读取长度为-1,而Android端则给出了这个例外:
java.net.SocketException: Socket closed
java.io.IOException: bt socket closed, read return: -1
我不知道为什么会发生这种情况。请对RDP低级别有所了解,因为我没有找到任何有用的信息。
答案 0 :(得分:0)
是的,看起来RDP在连接时会打开和关闭套接字。我刚刚从Windows Vista计算机到Windows Server 2003 R2服务器进行了RDP连接的数据包捕获,并且有两个TCP流。第一个TCP流由单向19个字节组成,然后以另一个方式包含19个字节,类似于您描述的方式。一秒钟之后,建立另一个TCP连接,这将持续会话的长度。
祝你的项目好运!