如何正确发送和接收多个流

时间:2016-03-31 21:40:19

标签: java sockets nio

我正在尝试为teamviewer做类似的事情,我的服务器向客户端发送命令,客户端开始发送屏幕截图,我继续在JLabel中显示这些,现在如果我的服务器发送另一个命令说" stream audio",如何使我的客户端流音频与桌面流一起(服务器应该能够理解收到的数据)?我应该使用NIO吗? ,我不明白NIO如何帮助编写多个输出和读取多个输出。

编辑 - 例如,我的服务器发送命令,客户端在新线程中流动屏幕,我的服务器再次发送命令获取音频,我的客户端启动另一个线程获取音频,此时有两个字节进入服务器,我的服务器如何正确处理它们?

1 个答案:

答案 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上的套接字