简体   繁体   English

PYTHON:从服务器接收到的数据返回

[英]PYTHON: Returning with received data from the server

On the client side I have the main code and a class.在客户端,我有主代码和 class。 If I call the foo function in the class, it sends some data to the server, it processes it and sends it back to the class.如果我在 class 中调用 foo function,它会向服务器发送一些数据,它会对其进行处理并将其发送回 class。 My question is that how can I return that data to the main code?我的问题是,我怎样才能将该数据返回到主代码?

Here is my class:这是我的 class:

    def foo(self, a, b, c):
        dataj = {"t": "t",
                 "data": {
                     "a": a,
                     "b": b,
                     "c": c
                 }}
        self.__client_socket.send(json.dumps(dataj).encode())

    def __receive_data(self):
        while True:
            data = self.__client_socket.recv(1024)
            data = json.loads(data.decode("utf-8"))
            if data["a"] == "b":
                #return data to main code

Main code:主要代码:

data = a.foo(1, 2, 3)

I am assuming when you want this data returned, the rest of your main code cannot be done without this data, so you could make a callback function that you give to the client object.我假设当您希望返回此数据时,如果没有此数据,您的主代码的 rest 将无法完成,因此您可以进行回调function 给客户端 ZA8CFDE6331BD59EB2AC96F8911C4B666 And also next time please provide a minimal-reproducible example as it would be easier for anyone helping with your code to test it themselves.并且下次请提供一个最小可重现的示例,因为任何帮助您的代码的人自己测试它会更容易。

So a solution could look like:所以解决方案可能如下所示:

# client class
def foo(self, a, b, c):
    dataj = {"t": "t",
             "data": {
                 "a": a,
                 "b": b,
                 "c": c
             }}
    self.__client_socket.send(json.dumps(dataj).encode())


def set_on_recv(self, callback):
    self.on_recv_cb = callback


def __receive_data(self):
    while True:
        data = self.__client_socket.recv(1024)
        data = json.loads(data.decode("utf-8"))

        # Check if self.on_recv_cb is callable, meaning we can call it like a function
        if callable(self.on_recv_cb):
            # call the function we provided and pass in the json data
            self.on_recv_cb(data)


# inside of client class
def set_on_recv(self, callback):
    self.on_recv_cb = callback


# end of client class


# outside of client class
def handle_data(data):
    # this code will be called when data is received by the client socket
    if data["a"] == "b":
        pass


my_client = client()  # no provided class
my_client.set_on_recv(handle_data)
# sends the data to the server
my_client.foo(1, 2, 3)
# then once the client receives the data, __receive_data calls the handle_data function
# that we passed into set_on_recv


# Assuming you have __receive_data in another thread,
# I put input to not exit the application before receiving data
input()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM