我有一些代码,我用来从网络套接字获取数据.它工作正常,但我试图通过反复试验进入它.我谦卑地承认我不完全理解它是如何工作的,但我真的很想.(这是我发现的货物形式的工作代码)
我不明白的部分以"ready = IO.select ..."开头.我不清楚:
这是代码:
@mysocket = TCPSocket.new('192.168.1.1', 9761)
th = Thread.new do
while true
ready = IO.select([@mysocket])
readable = ready[0]
readable.each do |socket|
if socket == @mysocket
buf = @mysocket.recv_nonblock(1024)
if buf.length == 0
puts "The server connection is dead. Exiting."
exit
else
puts "Received a message"
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
在此先感谢帮助我"学会钓鱼".我讨厌拥有一些我不完全理解的代码 - 这只是巧合.
eld*_*rge 22
1)IO.select
接受一组套接字并等待,直到可以读取或写入它们(或者如果发生错误).它返回发生的套接字事件.
2)数组包含检查事件的套接字.在您的情况下,您只指定用于阅读的套接字.
3)IO.select
返回一组套接字数组.元素0包含可以读取的套接字,元素1 - 可以写入的套接字和元素2 - 有错误的套接字.
获取套接字列表后,您可以读取数据.
4)是的,recv_nonblock
参数是以字节为单位的大小.请注意,实际读取的数据大小可能小于1024,在这种情况下,您可能需要重复select
(如果实际数据对您很重要).
归档时间: |
|
查看次数: |
9652 次 |
最近记录: |