【问题标题】:Python Client Unable to send data to Ruby ServerPython 客户端无法将数据发送到 Ruby 服务器
【发布时间】:2021-10-03 10:16:44
【问题描述】:

我有一些非常简单的 python 和 ruby​​ 代码,旨在允许我将数据包从一些 python 代码发送到 ruby​​ 代码。我能够更早地完成这项工作,但现在无法重新创建它。客户端(python 代码)能够连接到服务器,但永远不会超出 get 调用,这将永远阻塞。我没有从 python 端正确发送数据吗?

Ruby 代码(服务器):

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) 

【问题讨论】:

    标签: python ruby sockets networking


    【解决方案1】:

    阅读红宝石TCPServer docsthis answer,看来您需要关闭客户端。试试这个代码,它也可以服务于多个客户端:

    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。

    【讨论】:

      猜你喜欢
      • 2019-09-10
      • 1970-01-01
      • 2019-06-29
      • 2017-05-02
      • 2013-04-11
      • 2021-12-07
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多