(15)Ruby使用TcpSocket
2021/6/1 20:21:01
本文主要是介绍(15)Ruby使用TcpSocket,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
TcpSocket和TcpServer
Ruby提供了两个级别访问网络的服务,在底层允许你访问操作系统.
它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接字支持。
ruby提供了一些基本类,包括TCPSocket,UDPSocket,UNIXSocket等很多协议基类;
使用这些基本类,可以完成多种协议交互,而不必拘泥在网络层。
多个TCP连接或多个应用程序进程可能需要,通过同一个TCP协议端口传输数据。
这些类也提供了辅助类,让你可以轻松的对服务器进行读写
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题
生成套接字,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号
socket是"插座"。通过将这3个参数结合起来,与一个"插座"Socket绑定,应用层就可以和传输层
使用套接字接口,来区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
核心:获取在线帮助TCPSoket.methods (require socket)
=> [:gethostbyname, :getaddress, :attr, :attr_reader, :attr_writer, :attr_accessor, :select, :new, :open, :sysopen, :popen, :pipe :foreach, :binread, :binwrite, :read, :write, :readlines, :send,]
使用Ruby来完成TCP数据传输
Ruby提供了TCPSocket类的 new 方法来创建一个基础的TCP套接字
==> 你可以像操作IO对象一样操作它;
- 使用代码:TCPSocket.new(hosname, port) 创建一个TCP对象
- 这个方法封装了bind()和connect()地址的能力
- 连接并操作完成后,你需要像关闭文件一样关闭该连接。(这个类只能用于TCP客户端编写)
以下实例演示了如何连接到一个指定的主机,并从 socket 中读取数据,最后关闭socket:
require 'socket' # 获取socket标准库 hostname = 'localhost' port = 2000 s = TCPSocket.new(hostname, port) #这会发起一次TCP syn三次握手的连接申请 while line = s.gets # 从 socket 中读取每行数据 puts line.chop # 打印到终端 end s.close # 关闭 socket
Ruby 提供了TCPServer类的 new 方法创建一个基础的TCP服务套接字
==> 你可以像操作IO对象一样操作它;
- 使用代码:TCPServer.new(hostname, port) 来创建一个TCPServer对象
- 这个方法封装了bind()和listen()监听的能力
- 接下来调用 TCPServer 的 accept 方法等待一个客户端连接到指定的端口
- 然后返回一个的已建立连接的TCPServer对象
- 之后的操作都按照IO文件操作那样发送和接收数据。(这个类只能用于TCP服务端编写)
它们的关系是:TCPServer对象是 TCPSocket 的工厂对象。
require 'socket' # 获取socket标准库 server = TCPServer.new('localhost', 2000) # Socket 监听端口为 2000 loop { # 永久运行服务 client = server.accept # 等待客户端连接 client.puts(Time.now.ctime) # 发送时间到客户端 client.puts "Closing the connection. Bye!" client.close # 关闭客户端连接 }
Ruby 提供了Thread类实现多线程的方法,完成多个服务器连接数并发
达到一个线程执行客户端的连接,而主线程在等待更多的连接 的效果
require 'socket' # 获取socket标准库 server = TCPServer.open('localhost',2000) # Socket 监听端口为 2000 loop { # 永久运行服务 Thread.start(server.accept) do |client| client.puts(Time.now.ctime) # 发送时间到客户端 client.puts "Closing the connection. Bye!" client.close # 关闭客户端连接 end }
这篇关于(15)Ruby使用TcpSocket的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享