@Override
    public StorageConfig getStoreStorageOne(String groupName) throws FdfsException {
        Socket socket = getSocket();
        InputStream is = null;
        OutputStream os = null;
        try {
            os = socket.getOutputStream();
            is = socket.getInputStream();
            byte cmd = 0, errorNo = 0;
            if (Strings.isBlank(groupName)) {
                cmd = TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP_ONE;
            }
            else {
                cmd = TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ONE;
            }
            byte[] request = Messages.createRequest(groupName, fdfsClientConfig.getCharset(), cmd, errorNo);
            os.write(request);
            // recv
            ResponseBody responseBody = Messages.readResponse(is, TRACKER_QUERY_STORAGE_STORE_BODY_LEN);
            errorNo = responseBody.getErrorNo();
            if (errorNo != 0) {
                return null;
            }
            byte[] body = responseBody.getBody();
            ReadByteArrayFragment response = new ReadByteArrayFragment(body);
            String addr = response.readString(FDFS_GROUP_NAME_MAX_LEN, FDFS_IPADDR_SIZE - 1).trim();
            long port = response.readLong();
            byte storePathIndex = response.readByte();
            InetSocketAddress inetSocketAddress = new InetSocketAddress(addr, (int) port);
            StorageConfig storageConfig = new StorageConfig();
            storageConfig.setInetSocketAddress(inetSocketAddress);
            storageConfig.setStorePathIndex(storePathIndex);
            return storageConfig;
        } catch (Exception e) {
            String msg = "getStoreStorageOne fail, groupName=[{}], socket=[{}]";
            msg = Strings.format(msg, groupName, socket);
            throw new FdfsException(msg + e.getMessage(), e);
        } finally {
            closeSocket(socket, is, os);
        }
    }