我正在尝试为teamviewer做类似的事情,我的服务器向客户端发送命令,客户端开始发送屏幕截图,我继续在JLabel中显示这些,现在如果我的服务器发送另一个命令说" stream audio",如何使我的客户端流音频与桌面流一起(服务器应该能够理解收到的数据)?我应该使用NIO吗? ,我不明白NIO如何帮助编写多个输出和读取多个输出。
编辑 - 例如,我的服务器发送命令,客户端在新线程中流动屏幕,我的服务器再次发送命令获取音频,我的客户端启动另一个线程获取音频,此时有两个字节进入服务器,我的服务器如何正确处理它们?
答案 0 :(得分:0)
您需要在每个流之前发送流标识符和长度。 NIO将主要阻碍。 DataInput/OutputStreams
是可行的方法。
short或int可以用于类型,而int(可能)用于长度。
dos.writeShort(type);
dos.writeInt(length);
dos.write(data);
和......
int type = dis.readShort();
int length = dis.readInt();
byte[] buffer = new byte[length];
dis.readFully(buffer);
您应该在有命令发送时发送命令,但要读取客户端发送的所有内容,您需要另一个永久处于read()循环的线程,直到断开连接。
如果在读取或写入时抛出IOException,是否正确断开客户端?还是因为延迟等其他原因?
除了`SocketTimeoutException。
之外,你应该关闭任何IOException
上的套接字