创建套接字时的Responsestring(timestamp?)

时间:2018-03-24 14:27:14

标签: r sockets database-connection

我正在尝试为BaseX XML数据库构建一个Rclient,并使用Java和Python客户端作为示例。两个客户端都从创建套接字开始。两个套接字都会创建某种时间戳或信息字符串,只需在创建后查询即可。此字符串包含有关登录数据库系统所需的随机数的信息。

我猜R套接字也会生成这样的字符串,但我在文档中找不到任何内容。

在Java中,nonce是从BufferedInputStream中提取的(in = new BufferedInputStream(socket.getInputStream());)

R中是否有可用于获取现时的套接字属性?

1 个答案:

答案 0 :(得分:0)

在阅读了BaseX使用的serverprotocol上的文档之后,我发现该协议的一部分是服务器发送一个领域和一个nonce,用冒号分隔: 我找到了两种方法来创建和读取套接字。

    socket <- make.socket(host = "localhost", port = 1984L, server = FALSE)
    response <- tryCatch(  {read.socket(socket)  },   error = function(e) print(e))

此方法始终以

返回
    <simpleError in read.socket(socket): embedded nul in string: 'BaseX:55091316236372\0'>

第二种方法是:

    socket <- socketConnection(host = "localhost", port = 1984L, open = "w+b", server = FALSE, blocking = FALSE)
    size <- readBin(socket, what = "double")
    cat("Size ", as.integer(size), "\n")
    response <- tryCatch(  {readBin(socket, what = "character")  },   error = function(e) print(e))

我第一次使用第二种方法,按预期返回:

    Size   
    [1] "BaseX:55705356565816"

即使在关闭套接字后,第二次尝试打开并从套接字读取时,该方法返回&#34;字符(0)&#34;。我知道第二行和第三行没有任何作用,但是如果我删除它们,我总是得到字符(0)。

make.socket和socketConnection创建的套接字有什么区别?如何以一直有效的方式更改此代码?