首页 > 解决方案 > 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) 

标签: pythonrubysocketsnetworking

解决方案


阅读 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。


推荐阅读