套接字是一种抽象概念,可用于与网络上的某些事物进行通信。见下图…
在Java中,要通过套接字发送数据,您需要从中获得
OutputStream(1),然后写入
OutputStream(输出一些数据)。
要从套接字读取数据,请获取其
InputStream,然后从第二个流中读取输入。
您可以将这些流视为连接到墙上插座的 一对单向 管道。在墙的另一侧发生的事情不是您的问题!
在您的情况下,服务器具有另一个套接字(连接的另一端)和另一对流。它使用
InputStream(2)从网络读取数据,并使用
OutputStream(3)通过网络将
相同的 数据写回到您的客户端,客户端通过
InputStream(4)完成往返来再次读取数据。
Client Server1. OutputStream --> /--> 2. InputStream --> Socket <--> network <--> ServerSocket |4. InputStream <--/ <--3. OutputStream <--
更新: 回复评论:
请注意,流和套接字仅发送原始字节。在这种抽象级别上,他们没有“消息”的概念。因此,如果您发送X个字节和另外X个字节,然后读取X个字节并读取另一个X个字节,则系统的行为就好像有两条消息一样,因为这就是您将字节分割的方式。
如果您发送X个字节,再发送另外X个字节,然后读取长度为2X的答复,那么您 也许
可以读取单个组合的“消息”,但是正如您已经注意到的,流的基础实现可以选择何时交付大块字节,因此它可能返回X字节,然后再返回X字节,或者一次返回2X,或者四次返回0.5X
…



