【发布时间】:2013-11-24 15:50:54
【问题描述】:
试图了解 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()。在延迟期间 - 写入的数据将存储在哪里?会不会被传送?存储在“之间”某处的“延迟”数据的最大大小是多少?
【问题讨论】:
-
我希望你能找到能回答你问题的人。由于其范围,这将需要很多时间。简而言之,您是在询问线程并发性(请记住,单个线程一次只能做一件事)以及
Socket在某些依赖于平台的情况下的行为方式。我懒得写这些了。 :) -
仍然感谢您的尝试,MadConan。当然我自己会找到关于并发的信息,但是你能推荐一些关于 Java 网络的东西吗?
标签: java sockets networking io