试图了解 Java 套接字的操作方式。一个问题是:如果您使用套接字 Java API,您可以同时做什么,如果我们延迟发送和读取数据会发生什么?
一次读和写。如果一个 socket-client 连接到一个 spcket-server,它们可以同时读写吗?据我了解,TCP协议是全双工的,所以理论上socket应该可以同时读写,但是我们必须为bot客户端和服务器创建两个线程。我对吗?
一次写给 N 个客户。如果多个套接字客户端连接到一个套接字服务器,服务器可以同时读取多个客户端,服务器可以同时写入多个客户端吗?如果 NetworkCard 的最大可能物理速率为 1kbyte/sec 并且连接了 5 个客户端,那么可以使用哪种速度写入一个客户端?
如何实现双向数据的顺序发送?我的意思是我想从服务器向客户端发送 N 个字节,然后从客户端向服务器发送 M 个字节,然后从服务器向客户端发送 N 个字节等。问题是如果双方中的任何一方向通道写入了一些内容,另一方将停止仅当通道关闭时才读取该数据(read() == -1),这意味着我们不能重用它并且必须打开另一个连接。或者,可能是,我们应该将读取器和写入器放置在不同的线程中,这些线程使用 read() 和 write() 完成工作,直到连接关闭?
想象一下,我们在调用 write() 之间有一个延迟;一侧调用flush(),另一侧调用read()。在延迟期间 - 写入的数据将存储在哪里?会不会被传送?存储在“之间”某处的“延迟”数据的最大大小是多少?