查看: 636|回复: 2

[Python] 利用socket的远程更新

[复制链接]

0

技术

0

魅力

0

原创

初出茅庐

Rank: 2

积分
131
人气
5
分享
0
发表于 2022-12-1 21:10:37 | 显示全部楼层 |阅读模式
自己写的。。。
已知BUG:在Windowd Server 2008上会返回自身,不知道为什么,也没去修,不方便调试(因为我是MAC系统)
# server
import socket


def folder(folder_name):
    import os
    try:
        os.mkdir(folder_name)
    except FileExistsError:
        # return "文件夹已存在"
        return False  # 因文件夹已存在而创建失败就返回False
    else:
        # return "文件夹创建成功"
        return True  # 创建成功返回True


# 创建UPD服务端套接字
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
    # 绑定地址和端口
    s.bind(("", 9002))
    # 等待接收信息
    while True:
        # 接收数据和客户端请求地址
        data, address = s.recvfrom(1024)  # 一次最多发多少包
        if not data:
            break  # data不存在的话就重新循环
        import time

        print("[{}:{} {}]{}".format(str(address[0]), str(address[1]), time.strftime("%Y/%m/%d %H:%M:%S"),
                                     data.decode("utf-8")))
        import os

        if folder("py") == True:
            print("你没有文件夹,已新建一个名为py的文件夹,请把程序放入并把文件名改为1.py2.py之类的")
        if data.decode("utf-8").split("|")[1] == "文件":
            file_name = "./py/" + data.decode("utf-8").split("|")[0] + ".py"
            if os.path.isfile("./py/" + data.decode("utf-8").split("|")[0] + ".py") == False:
                s.sendto("文件不存在".encode("utf-8"), address)
                break
            else:
                with open(file_name, "r", encoding="utf-8") as file:
                    file_len = str(len(file.readlines())) + "|?"
                s.sendto(file_len.encode("utf-8"), address)
                import time

                folder("log")
                File_Name = "./log/" + time.strftime("%Y-%m-%d") + ".txt"  # 按天来记录log
                with open(File_Name, "a+", encoding="utf-8") as file:
                    file.write(
                        "{}:{} {} 访问 {}.py\n".format(str(address[0]), str(address[1]), time.strftime("%H:%M:%S"),
                                                       data.decode("utf-8").split("|")[0]))
        elif data.decode("utf-8").split("|")[1] == "?":
            import linecache

            file_name = "./py/" + data.decode("utf-8").split("|")[2]
            file_data = linecache.getline(file_name, int(data.decode("utf-8").split("|")[0]))
            s.sendto(file_data.encode("utf-8"), address)

    s.close()

# client
import socket

# Host = "8.131.94.236"
Host = "localhost"
Port = 9002
BUFFSIZE = 1024
# from time import ctime
# 创建客户端套接字
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
    while True:
        # 发送信息到服务器 data.decode("utf-8").split("|")[0] + ".py"
        file_name = input("请输入你要获取得文件:")  # 可以直接file_name = "1",会直接获取“1.py”,就做到远程更新了
        data = file_name + "|文件"
        # data = '[{}]:{}'.format(ctime(), data)
        s.sendto(data.encode("utf-8"), (Host, Port))
        # 接收服务端返回信息
        recvData, addrs = s.recvfrom(BUFFSIZE)
        if recvData.decode("utf-8").split("|")[0] == "文件不存在":
            print("文件不存在")
        print("获取成功~")
        print("共有" + recvData.decode("utf-8").split("|")[0] + "")
        if recvData.decode("utf-8").split("|")[1] == "?":
            file_line = recvData.decode("utf-8").split("|")[0]
            for i in range(int(recvData.decode("utf-8").split("|")[0])):
                line = str(i + 1) + "|?|" + file_name + ".py"
                s.sendto(line.encode("utf-8"), (Host, Port))
                recvData, addrs = s.recvfrom(BUFFSIZE)  # 接收服务端返回信息
                with open("./" + file_name + ".py", "a+", encoding="utf-8") as file:
                    file.write(recvData.decode("utf-8") + "\n")
            import os

            # os.system("python ./" + file_name + ".py")
        else:
            print(recvData.decode("utf-8"))

    # 关闭套接字
    s.close()



评分

参与人数 1经验 +11 人气 +5 收起 理由
YFSafe + 11 + 5 很厉害!

查看全部评分

0

技术

0

魅力

0

原创

初出茅庐

Rank: 2

积分
131
人气
5
分享
0
 楼主| 发表于 2022-12-1 21:11:16 | 显示全部楼层
https://bbs.x64.site/thread-1527-1-1.html
看见这个帖子才发的(虽然看不见内容)

4

技术

17

魅力

6

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
5367
人气
208
分享
36

最佳新人活跃会员

发表于 2022-12-2 10:48:50 | 显示全部楼层
感谢,正好解决了我的需求
YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表