我正在尝试为BaseX XML数据库构建一个Rclient,并使用Java和Python客户端作为示例。两个客户端都从创建套接字开始。两个套接字都会创建某种时间戳或信息字符串,只需在创建后查询即可。此字符串包含有关登录数据库系统所需的随机数的信息。
我猜R套接字也会生成这样的字符串,但我在文档中找不到任何内容。
在Java中,nonce是从BufferedInputStream中提取的(in = new BufferedInputStream(socket.getInputStream());)
R中是否有可用于获取现时的套接字属性?
本
答案 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创建的套接字有什么区别?如何以一直有效的方式更改此代码?
本