@NotNull
  Short getServerVersion(final @NotNull DataInputStream in, final @NotNull DataOutputStream out)
      throws IOException {
    sendRequest(out, KnownVersion.OLDEST.ordinal(), new VersionRequest());
    try {
      assertNotSslAlert(in);
      final VersionResponse versionResponse = objectDeserializer.readObject(in);
      return versionResponse.getVersionOrdinal();
    } catch (EOFException ignored) {
      // old locators will not recognize the version request and will close the connection
      return KnownVersion.OLDEST.ordinal();
    } catch (IOException e) {
      throw e;
    } catch (Exception e) {
      throw new IOException("Server version response invalid.", e);
    }
  }
Send a request to a Locator

@param address The locator's address
@param request The request message
@param timeout Timeout for sending the message and receiving a reply
@param replyExpected Whether to wait for a reply
@return The reply, or null if no reply is expected. This may also return a null
        if we're unable to form a connection to the TcpServer before the given timeout elapses
@throws ClassNotFoundException if the deserializer throws this exception
@throws IOException if there is a problem interacting with the server
geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java