socket通信

import pickle
import socket

IP = "172.17.9.95"
PORT = 8081


def sendData(server, data):  # 向边缘端发送数据
    str = pickle.dumps(data)  # 将数据打包好
    server.send(len(str).to_bytes(length=6, byteorder='big'))  # 向边缘端发送数据的长度
    server.send(str)  # 向边缘端发送数据


def receiveData(server):  # 接收边缘端的数据

    while True:

        conn, addr = server.accept()

        while True:

            # 获取边缘端发送的数据长度
            lengthData = conn.recv(6)
            length = int.from_bytes(lengthData, byteorder='big')
            b = bytes()
            if length == 0:  # 判断数据长度是否为0,是0,则进行下一次循环。
                continue
            count = 0

            while True:  # 获得从边缘端发送的数据
                value = conn.recv(length)
                b = b + value
                count += len(value)
                if count >= length:
                    break

            data = pickle.loads(b)  # 解压数据

            print(data)

            sendData(conn, data + 1)  # 将运行结果发送到边缘端

            break


if __name__ == '__main__':
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setblocking(1)  # 设置为阻塞模式,直到边缘端返回结果才继续向下执行
    server.bind((IP, PORT))

    print("云端启动,准备接受任务")
    print()

    server.listen(10)  # 设置socket的”排队个数“
    receiveData(server)

import pickle
import socket
import threading

IP = "172.17.9.95"
PORT = 8081


def sendData(server, data):  # 向边缘端发送数据
    str = pickle.dumps(data)  # 将数据打包好
    server.send(len(str).to_bytes(length=6, byteorder='big'))  # 向边缘端发送数据的长度
    server.send(str)  # 向边缘端发送数据


def receiveData(client):  # 接受云端的数据

    while True:

        # 获取云端发送的数据长度
        lengthData = client.recv(6)
        length = int.from_bytes(lengthData, byteorder='big')
        if length == 0:  # 判断数据长度是否为0,是0,则进行下一次循环。
            continue

        b = bytes()
        count = 0

        while True:  # 获得从云端发送的数据
            value = client.recv(length)
            b = b + value
            count += len(value)
            if count >= length:
                break

        data = pickle.loads(b)  # 将数据解包

        global MyData
        MyData = data

        client.close()  # 断开连接
        break


if __name__ == '__main__':

    for i in range(10):

        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect((IP, PORT))
        print("云端连接成功,准备提交计算任务")
        print("任务已提交,进行卸载决策")

        sendData(client, 1)  # 从第0层开始,到第count层在云端执行,发送相关数据。

        # 启动线程用于接受云端返回的后续的中间数据。
        t = threading.Thread(target=receiveData, name='receiveData', args=(client,))
        t.start()
        t.join()

        print(MyData)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值