我正在开发一个Java小型客户端-服务器程序。客户端和服务器通过一个tcp连接相连。大多数通信部分是异步的(可以在任何时候发生),但我希望某些部分是同步的(例如发送命令的ACK)。我使用一个线程从套接字的InputStream中读取命令,并引发onCommand()事件。命令本身由Command-Design-Pattern处理。在Java中,最佳实践方法是什么,以使等待ACK而不错过可能同时出现的其他命令?
con.sendPacket(new Packet("ABC"));
// wait for ABC_ACK
编辑1
可以将其类比为FTP连接,但数据和控制命令都在同一连接上。我想捕获对控制命令的响应,同时后台正在运行数据流。
编辑2
所有内容都以块的形式发送,以便在同一TCP连接上进行多个(不同的)传输(复用)。
Block:
1 byte - block's type
2 byte - block's payload length
n byte - block's paylod