这是一个研发项目.通过蓝牙将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低级别有所了解,因为我没有找到任何有用的信息.