我的目标是用不同的编程语言绑定TCP RPC服务器AIOMA和客户端。 我正在设置连接,但既没有收到服务器的响应,也没有收到响应。 文件说明:

https://media.readthedocs.org/pdf/aiomas/1.0.3/aiomas.pdf

 Page 26: - On the RPC level, it a three-tuple:
[function, [arg0, arg1, ...], {kwarg0: val0, kwarg1: val1}]
function is a string containing the name of an exposed functions; The type of the arguments and keyword arguments may vary depending on the function.

此简单服务器:

import aiomas

class Server:
    router = aiomas.rpc.Service()

    @aiomas.expose
    def ping(self, i):
        print('Ping receive data: {}'.format(i))
        return i


if __name__ == '__main__':
    server = aiomas.run(aiomas.rpc.start_server(
        ('127.0.0.1', 5000),
        Server())
    )
    print('Server run')
    aiomas.run(server.wait_closed())

这是我的问题tcp客户端

import socket
import pickle


MESS = ['ping', [1]]

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 5000))
s.settimeout(1.5)
s.send(pickle.dumps(MESS))
data = s.recv(1024)
s.close()

请告诉我怎么了。为了在其他语言中实现这一点,必须理解。非常感谢您的任何提示

1 回复  |  直到 7 年前
    1
  •  0
  •   Константин Велопокатуновичь    7 年前

    我多次阅读了文档,但我不知道如何编写包的标题。结果,我发现最后一个字节是包的长度。一切正常。 下面是一个示例包

    data='[0, 0, ["methood", ["args"], {"kwargs":"if exists"}]]'
    
    hex(len(data)) -->  0x35
    
    b'\x00\x00\x00\x35[0, 0, ["methood", ["args"], {"kwargs":"if exists"}]]'