java - 如何同步读取和写入套接字?

标签 java sockets

我们创建一个套接字。在套接字的一侧有一个“服务器”,在另一侧有一个“客户端”。服务器和客户端都可以写入和读取套接字。这是我的理解。我不明白以下几点:

  1. 如果服务器从套接字读取数据,它是否只在套接字中看到客户端写入套接字的内容?我的意思是,如果服务器向套接字写入内容而不是从套接字读取内容,它(服务器)是否会在套接字中看到它(服务器)在那里写入的内容?我希望不会。

  2. 让我们考虑以下情况。客户端向套接字写入一些内容,然后向套接字写入一些新内容,然后服务器从套接字中读取。服务器会在那里看到什么?仅客户编写的"new"内容还是"new"和“旧”内容?

  3. 如果客户端(或服务器)向套接字写入,它能否查看写入的信息是否被另一端接收到?例如 out.println("Hello, Server!") 将在服务器收到此消息时返回 true

最佳答案

套接字连接代表两个单向流:一个从客户端到服务器,一个从服务器到客户端。

每一方都可以将数据放入一个流中并从另一个流中读取。

放入一个流中的数据附加到已经存在的数据的末尾。

当从流的一端读取数据时,将读取最旧的可用数据(即流是 FIFO)。

这些陈述应该能让您回答所有问题,但我也会明确说明:

  1. 服务器只会读取客户端写的内容,不会读取自己写的内容
  2. 服务器会先读旧的,再读新的
  3. 除非服务器发送响应,否则客户端无法立即知道另一方是否实际接收到数据。在某些情况下,它可以知道发送是否失败(例如,当客户端出现物理问题时),但通常不能依赖该通知。

关于java - 如何同步读取和写入套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493544/

相关文章:

java - 通过 WTP 将依赖项目部署到 Tomcat

python:在 OSX 中使用原始套接字

python - 套接字发送超时 - 更改是否安全?

python - 简单的Python 3聊天;同时发送和接收

C#:无法在 TCP 服务器上接收大数据

java - 设计命令行实用程序的包装器

Java-温度转换循环问题

java - glassfish应用程序服务器中的Web服务器是什么?

java - 按示例查询跳过原语?

javascript - 如何使用客户端从套接字发出的 json 数据?