(16)Ruby使用UdpSocket
2021/6/1 20:21:02
本文主要是介绍(16)Ruby使用UdpSocket,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
UdpSocket,没有UdpServer
Ruby提供了两个级别访问网络的服务,在底层你可以访问操作系统.
它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接字支持。
ruby提供了一些基本类,包括TCPSocket,UDPSocket,UNIXSocket等很多协议基类;
使用这些基础类,可以完成多种协议交互,而不必拘泥在网络层
多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据
这些类也提供了辅助类,让你可以轻松的对服务器进行读写
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题
生成套接字,主要有3个参数:通信的目的IP地址、使用的传输 层协议(TCP或UDP)和使用的端口号
Socket原意是"插座"。通过将这3个参数结合起来,与一个"插座"Socket绑定,应用层就可以和传输层
通过套接字接口,来区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
核心:获取在线帮助UDPSoket.methods (require socket)
=> [:getaddress, :attr, :attr_reader, :attr_writer, :attr_accessor, :select, :new, :open, :sysopen, :popen, :pipe :foreach, :binread, :binwrite, :read, :write, :readlines, :send,]
使用Ruby完成UDP的数据传输
1) Ruby 提供了UDPSocket类的 new 方法来创建一个基础的Udp套接字。
使用代码:UDPSocket.new() 无参数,创建一个 Udp 套接字。
2) Ruby 提供了UDPSocket类的 bind 方法绑定此套接字使用的地址和端口;
使用代码:UDPSocket.bind(hosname, port) ,绑定该套接字使用的地址和端口
3) Ruby 提供了UDPSocket类的 send 方法发送一定的数据到指定的服务地址
使用代码:UDPSocket.send('message', flag , udpsvr_ip , port) 来向指定的服务端口发送数据
4) Ruby 最后提供UDPSocket类的 recvfrom 方法,接受来自udp链接的数据,参数指定最大接受数量。
使用代码:UDPSocket.recvfrom(1024),表示接受数据;需要保存到指定的变量中;
5) Ruby 也提供了UDPSocket类的 connect 方法记录一个udp服务端地址,这里的仅仅是指定目标地址的属性
使用代码:UDPSocket.connect('localhost', port) 方法,给该socket指定《目标地址》这种属性
当然,这个时候调用 UDPSocket.send('message', flag) 不需要指定目标地址了
{ 费解:UDP是面向不连接的,不应存在connect这类方法,相反;监听端口的方法却未找到 }
require 'socket' # 导入相关类模块 s1 = UDPSocket.new s1.bind("127.0.0.1", 0) s2 = UDPSocket.new s2.bind("127.0.0.1", 0) s2.connect(*s1.addr.values_at(3,1)) s1.connect(*s2.addr.values_at(3,1)) s1.send "aaa", 0 begin # emulate blocking recvfrom p s2.recvfrom_nonblock(10) #=> ["aaa", ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]] rescue IO::WaitReadable IO.select([s2]) retry end
================================
u1 = UDPSocket.new u1.bind("127.0.0.1", 4913) #通过上面代码可以猜测,在接收到请求后,这个代码应该包括listen的自动识别能力 u2 = UDPSocket.new u2.send "hi", 0, "127.0.0.1", 4913 mesg, addr = u1.recvfrom(10) u1.send mesg, 0, addr[3], addr[1] p u2.recv(100) #=> "hi"
这篇关于(16)Ruby使用UdpSocket的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享
- 2024-11-22ansible 的archive 参数是什么意思?-icode9专业技术文章分享
- 2024-11-22ansible 中怎么只用archive 排除某个目录?-icode9专业技术文章分享
- 2024-11-22exclude_path参数是什么作用?-icode9专业技术文章分享
- 2024-11-22微信开放平台第三方平台什么时候调用数据预拉取和数据周期性更新接口?-icode9专业技术文章分享
- 2024-11-22uniapp 实现聊天消息会话的列表功能怎么实现?-icode9专业技术文章分享
- 2024-11-22在Mac系统上将图片中的文字提取出来有哪些方法?-icode9专业技术文章分享
- 2024-11-22excel 表格中怎么固定一行显示不滚动?-icode9专业技术文章分享
- 2024-11-22怎么将 -rwxr-xr-x 修改为 drwxr-xr-x?-icode9专业技术文章分享
- 2024-11-22在Excel中怎么将小数向上取整到最接近的整数?-icode9专业技术文章分享