You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中正确传入UDP Socket send函数参数?解决类型转换错误

解决UDP套接字send方法的“no implicit conversion to string”错误

错误根源

你的代码中system(command)返回的是布尔值(true表示命令执行成功,false表示失败),但UDPSocket#send方法的第一个参数要求是字符串类型,类型不匹配导致了转换错误。

修正方案

根据你的需求,有两种常见的解决方式:

方案1:返回命令执行的输出结果

如果需要把命令执行的标准输出返回给客户端,不要使用system,改用%x[#{command}]来捕获命令输出:

require 'socket'

socket = UDPSocket.new()
socket.bind('0.0.0.0',6666)
loop do
  command,sender = socket.recvfrom(24)
  ip = sender[3]
  # 捕获命令的标准输出,strip去除多余的换行/空格
  resp = %x[#{command.strip}]
  # 检查命令执行状态,失败时补充提示信息
  resp = "Command execution failed" if $?.exitstatus != 0
  socket.send(resp, 0, ip.to_s, sender[1])
end
  • %x[command]会执行命令并返回其标准输出的字符串,完美匹配send的参数要求。
  • $?是Ruby的全局变量,用于获取上一个子进程的退出状态码,据此判断命令是否执行成功。

方案2:仅返回执行成功/失败的状态

如果只需要告知客户端命令是否执行成功,将布尔值转换为字符串即可:

require 'socket'

socket = UDPSocket.new()
socket.bind('0.0.0.0',6666)
loop do
  command,sender = socket.recvfrom(24)
  ip = sender[3]
  success = system(command)
  # 将布尔状态转换为可读的字符串
  resp = success ? "Command executed successfully" : "Command failed"
  socket.send(resp, 0, ip.to_s, sender[1])
end

内容的提问来源于stack exchange,提问作者user14527579

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:35:16