python - Python 客户端无法将数据发送到 Ruby 服务器
问题描述
我有一些非常简单的 python 和 ruby 代码,旨在允许我将数据包从一些 python 代码发送到 ruby 代码。我能够更早地完成这项工作,但现在无法重新创建它。客户端(python 代码)能够连接到服务器,但永远不会超出 get 调用,这将永远阻塞。我没有从 python 端正确发送数据吗?
红宝石代码(服务器):
require 'socket'
server = TCPServer.open('127.0.0.1', 8211)
# listen for commands to the server
loop {
serverClient = server.accept
# i am able to connect
data_string = serverClient.gets
# i never reach this point
print("process data!\n")
}
Python代码(客户端):
import socket
import json
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect('127.0.0.1', 8211)
#try to send over a basic dict/json object
obj = {"Key":"Value"}
data = bytes(json.dumps(obj), "utf-8")
socket.send(data)
解决方案
阅读 rubyTCPServer
文档和这个答案,看来您需要关闭客户端。试试这个代码,它也可以服务于多个客户端:
require 'json'
require 'socket'
server = TCPServer.open('127.0.0.1', 8211)
# listen for commands to the server
loop {
Thread.start(server.accept) do |client|
response = client.gets
data = JSON.parse(response)
print("process data!\n")
puts data
client.close
end
}
仅供参考:在 ruby 中不鼓励使用 camelCase 命名变量,请改用 snake_case。
推荐阅读
- android - 框架布局 添加图像 不显示图像
- uwp - UWP - 如何在拖放过程中更改拖动图像的大小?
- entity-framework - 编写 ef 核心语句,该语句在 SQL 上执行
- c# - 使用适配器模式测试记录器
- dask - 如何与 Dask 一起运行一组节点
- gradle - 在 Kotlin 脚本中“包含”不起作用:^ 意外标记(使用 ';' 分隔同一行上的表达式)
- java - 如何让gradle打包所有依赖jar?
- excel - Excel多行到多列转换
- javascript - 使用 Javascript if 函数显示 SweetAlert 弹出窗口
- java - 在eclipse、windows 10下启动tomcat时出现EXCEPTION_ACCESS_VIOLATION