我正在尝试将文本发送到使用R侦听TCP端口的服务器,然后从服务器读取响应文本。 相当简单,即在服务器上侦听端口12345的BASH上,即:
> echo "text" | nc localhost 12345
response
服务器继续运行,此后可以再次查询。 但是如果我在R中使用socketConnection尝试同样的事情,我要么永远不会得到响应,要么打印而不是捕获。 我尝试过以下方法:
con <- socketConnection(port=12345)
con <- socketConnection(port=12345, blocking=TRUE, timeout=2)
writeLines("text", con) # server does not receive a thing
flush(con) # has no effect
readLines(con) # still, nothing happens and gets nothing back
close(con) # server confirms receipt, but I no longer can get the result...
服务器仅在关闭连接后才接收数据,因此无法读取任何内容
con <- pipe("nc localhost 12345")
writeLines("text", con)
现在,&#34;结果&#34;打印到STDOUT,所以我无法捕获它... 如果使用包含&#34; text&#34;:
的临时文件 res <- readLines(pipe("nc localhost 12345 < tempfile"))
这有效,但需要一个中间的临时文件。 如何让服务器通信在R中工作,以便我可以写入然后从同一个连接读取?
答案 0 :(得分:3)
我编译并运行了这个simple server,导致
Socket created
bind done
Waiting for incoming connections...
然后在R中我创建了一个连接
con <- socketConnection("127.0.0.1", port = 8888)
服务器响应
Connection accepted
然后回到R ......
writeLines("all the world's a stage", con)
x = readLines(con)
x
## [1] "all the world's a stage"
close(con)
服务器响应
Client disconnected
然后按预期退出。不确定这与您尝试过的有何不同。