gpt4 book ai didi

java - 服务器和客户端之间的通信标准

转载 作者:行者123 更新时间:2023-12-02 01:06:28 27 4
gpt4 key购买 nike

我对服务器和客户端定义它们之间的通信标准的方式有疑问。作为引用,我正在使用 Java 并引用 here 的代码.

  1. 客户端需要服务器的 IP 才能连接到它。如果服务器使用方法 InetAddress.getLocalHost().getHostAddress(),则返回的 IP 地址将是本地的:如果客户端与服务器位于同一台计算机上,则很有用,否则则不太有用。如何获取客户端需要的服务器IP?是否可以在不使用外部服务或站点 ping 您的服务器并返回您的公共(public) IP 的情况下获取此信息?
  2. 假设我,客户端,已经与服务器建立了Socket通信。现在我需要打开输入和输出流,该流必须与服务器端的流兼容。我怎样才能提前知道正确的种类?例如,让我们考虑 time.nist.gov 的情况,端口 13。我希望与该服务器的通信输出是封装当前日期的 String。服务器是否通过ObjectOutputStream或者OutputStreamWriter传输所述String?我怎么知道?

最佳答案

The client needs the server's IP to connect to it... How can I get the server IP that the client needs? Is it possible to acquire this information without using external services or sites that ping your server and return your public IP?

客户端必须知道服务器的 IP 地址或主机名。如果主机名已知,则可以在客户端使用 java.sun 使用 InetAddress.getByName( "java.sun.com") 计算出 IP 地址以 .com 为例。

I need to open the input and output stream, which must be of a kind compatible with the stream on the server side. How can I know in advance the correct kind?

由于消息传递因协议(protocol)而异,因此客户端必须知道服务器支持什么并相应地写入其输入和输出流。通常,客户端-服务器系统以基于字节的输入和输出进行通信。也就是说,客户端和服务器之间将交换纯字节数据。然后,他们根据需要根据商定的字符编码(例如 UTF-8)将这些字节从字符转换为字符。

Does the server transmit said String through an ObjectOutputStream, or maybe an OutputStreamWriter?

这是需要理解协议(protocol)概念的地方。你可能已经知道,但是,我写它只是为了解释清楚。协议(protocol)是消息传递风格的协议(protocol)或契约 - 发送多少字节、何时发送、如何编码等。例如,在 SMTP 中,客户端必须首先说 HELO 或 EHLO,收到后服务器返回特定的回复。 客户必须知道在此阶段会发生什么以及如何根据协议(protocol)进一步推进

ObjectInputStreamObjectOutputStream 的用法

现在,ObjectInputStreamObjectOutputStream 是 IO 流上的 Java 特定包装器,用于以 Java 对象的“形状”读取和写入字节缓冲区。也就是说,这些类仅用于 Java 对象特定的目的。 如果知道服务器正在使用序列化/反序列化 Java 对象进行通信,那就没问题。但是,客户端连接的服务器可能根本不使用 Java!或者即使是这样,它也可能以纯字符或字节进行通信,而不是以 Java 对象进行通信。

我不确定 time.nist.gov:13 使用的是什么协议(protocol)。您需要理解这一点并相应地为您的客户端编写代码。但是,既然您提到它返回一个字符串:

  1. 只需在客户端使用 socket.getInputStream(),无需使用 ObjectInputStream 包装
  2. 从此流中读取字节直至 EOF
  3. 考虑网站发布的字符编码(例如 UTF-8),将这些字节转换为 Stringnew String(bytes, StandardCharsets.UTF_8)

关于java - 服务器和客户端之间的通信标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59985614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com