Sockets R socketConnection/make.socket():有没有办法保持侦听()的状态?

Sockets R socketConnection/make.socket():有没有办法保持侦听()的状态?,sockets,r,Sockets,R,[免责声明:我对插座的了解已经非常生疏,我刚刚进入R,所以如果我遗漏了一些非常明显的内容,请指出!] 如果我了解用于创建和管理套接字的(文档很少)R函数,即socketConnection和make.socket,那么在创建服务器套接字(server=TRUE)时,似乎执行了以下道德等效操作: s = socket(yada yada); listen(s, ...); s2 = accept(s, ...); close(s, ...); 现在我可以使用s2,但不能循环处理s的传入连接积压。

[免责声明:我对插座的了解已经非常生疏,我刚刚进入R,所以如果我遗漏了一些非常明显的内容,请指出!]

如果我了解用于创建和管理套接字的(文档很少)R函数,即
socketConnection
make.socket
,那么在创建服务器套接字(
server=TRUE
)时,似乎执行了以下道德等效操作:

s = socket(yada yada);
listen(s, ...);
s2 = accept(s, ...);
close(s, ...);

现在我可以使用
s2
,但不能循环处理
s
的传入连接积压。这或多或少是对的吗?在处理第一个传入连接后,有没有办法继续侦听并继续处理其他传入连接?

我也想知道这个问题的答案。。。但与此同时,我至少可以提出一个有一些限制的解决方案:

如果您可以知道将连接多少个客户端,那么以下操作应该可以正常工作

在服务器上:

n=2         # Number of clients
port=22131

slist=vector('list',n)
# Connect to all clients
for(i in 1:n) slist[i] <- socketConnection('localhost', port=port, server=TRUE)

# Wait for a client to send data, returns the client index 
repeat {
  avail <- which( socketSelect(slist) )[[1]]
  # ...then read and process data, rinse, repeat...
}
n=2#客户端数量
端口=22131
slist=向量('列表',n)
#连接到所有客户端

对于(1:n中的i)slist[i]No,您可以在
s1
上触摸后日志


窗口1:

$ R
s1 = socketConnection(server=T,port=12345)
s2 = socketConnection(server=T, port=98765)
readLines(s1,1)
# "if ever I should leave you, it wouldn't be in springtime"
readLines(s2,1)
# "for Hitler and Germany"
readLines(s1,1)
# "knowing how in spring I'm bewitched by you so"
窗口2:

$ nc localhost 12345
If ever I should leave you, it wouldn't be in springtime
Knowing how in spring I'm bewitched by you so
oh no not in springtime, summer, winter, or fall
no never could I leave you at all
窗口3:

$ nc localhost 98765
for Hitler and Germany
Deutschland is happy and gay
we're marching to a faster pace
look out, here comes the Master Race!
窗口1:

$ R
s1 = socketConnection(server=T,port=12345)
s2 = socketConnection(server=T, port=98765)
readLines(s1,1)
# "if ever I should leave you, it wouldn't be in springtime"
readLines(s2,1)
# "for Hitler and Germany"
readLines(s1,1)
# "knowing how in spring I'm bewitched by you so"

谢谢你的主意!不幸的是,我事先不知道有多少客户端可以同时连接,尽管我可能会修改您的代码,以在一个“套接字池”中循环连接,该“套接字池”可以同时支持多达N个客户端。您有没有弄明白这一点?downvoter。。。你是说这是错误的吗?或者只是不喜欢我在音乐剧方面的品味?让我告诉你为什么投反对票:“希特勒和德国”。。为什么你不能把它改成更好的呢?对于那些一直在写这首歌的人来说,请注意,上面的歌词来自/不管这首歌词的来源如何,它支持暴力种族主义,绝对没有必要回答anway的问题。