Lalas,我也在尝试做你想做的事情,因为它对套接字完全一无所知。tdsmith
在#R
freenode 聊天室里给了我正确的建议:使用telnet
.
因此,终端窗口 1:
R
s = socketConnection(port=12345, server=T)
R
现在应该挂了(等待有人与之交谈)。
现在打开另一个终端窗口并输入:
telnet localhost 12345
回到窗口 1。你会看到R
它不再挂起。好的!所以现在输入(在同一个窗口 1 中):
readChar(s,3)
返回窗口 2,telnet
窗口。类型:
Lalas wins at life.
您将在窗口 1 中看到的是,在窗口 1 范围之外某处输入的文本已进入窗口 1。
Lal
不幸readChar
的是,我们期待一个更短的消息,所以你没有得到完整的信息。再试readChar(s,6)
一次,你会听到
as win
. 您会注意到readChar(s,1)
听到的信件似乎一直“挂在那里”(在哪里?)。诡异的。但显然这是一种令人讨厌的收听方式,必须预先指定消息长度!
试试readLines(s)
哪个不需要规范;它等待一个EOL字符。
回到窗口2,telnet窗口:
Money
that's what I want
that's what I waaaaaaaant
我能想到的唯一方法readLines(s)
是听到我的声音Ctrl],telnet
然后听到提示close
音。R
不会听到所有这些换行符(即使您键入\r\n
等),但是一旦连接关闭,您将在窗口 1 中获得每一行。
现在这是ernst
在同一个 freenode 房间中使用更多帮助。而不是使用telnet
这个时间使用nc localhost 12345
. Netcat 可以听和说,并且表现得更符合预期,因为我可以EOL使用CtrlD.
关闭并重新打开窗口 1 的套接字连接s = socketConnection(port=12345,server=T)
。telnet
在窗口 2 中关闭,然后键入nc localhost 12345
。现在在任一侧键入消息,它们可以相互接收。
窗口 1:
cat( rpois(1e2, 20), file=s)
readLines(s)
窗口 2(应该已经听到了一些随机数):
Lalas
wins
at
life.
{{control D}}
窗口 1 现在应该已经收到了消息。