Sockets R socketConnection/make.socket():有没有办法保持侦听()的状态?
[免责声明:我对插座的了解已经非常生疏,我刚刚进入R,所以如果我遗漏了一些非常明显的内容,请指出!] 如果我了解用于创建和管理套接字的(文档很少)R函数,即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的传入连接积压。
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的问题。