我们创建一个套接字。套接字的一侧有一个“服务器”,另一侧有一个“客户端”。服务器和客户端都可以向套接字写入和读取。这是我的理解。我不明白以下几点:
如果服务器从套接字读取,它是否在套接字中仅看到客户端写入套接字的内容?我的意思是,如果服务器向套接字写入某些内容,而不是从套接字读取内容,那么它(服务器)会在套接字中看到它(服务器)在那儿写的东西吗?我希望不是。 让我们考虑以下情况。客户端向套接字中写入一些内容,然后向套接字中写入一些新内容,然后服务器从套接字中读取内容。服务器在那里会看到什么?仅仅是客户编写的"new"东西,还是"new"和“旧”东西? 如果客户端(或服务器)写入套接字,是否可以查看写入的信息是否被另一端接收?例如,out.println("Hello, Server!")
将在服务器收到此消息后返回true
。 套接字连接表示两个单向流:一个从客户端到服务器,另一个从服务器到客户端。
每一侧都可以将数据放入一个流中,并从另一流中读取。
放入一个流中的数据将附加到已经在那里的数据的末尾。
从流的一端读取数据时,将读取最旧的可用数据(即,流是FIFO)。
这些语句应使您能够回答所有问题,但我也要明确指出:
服务器将仅读取客户端编写的内容,而不读取其自身编写的内容服务器将首先读取旧内容,然后读取新内容除非服务器发送一些响应消息,否则客户端无法立即知道对方是否实际接收到数据。在某些情况下,它可以知道发送是否失败(例如,当客户端发生物理问题时),但是通常不能依赖在那里的通知。