我是靠谱客的博主 英俊帆布鞋,这篇文章主要介绍python实现socket互传json文件,现在分享给大家,希望可以做个参考。

项目需要,在借鉴他人已有代码的基础上实现了用python和socket互传json文件,注意是轮流发送文件。特点是两端均既为服务端也为客户端,建立了两个信道,均可执行向对方发送指令。

好处是两者平权,己方文件生成后进行发送,主动给出发送命令。

主要借鉴的代码如下,如有任何问题,请与我联系。
链接: https://www.cnblogs.com/LyShark/p/11317152.html

先发送的一方:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import socket import os import json import time def main(): bool = 0 # bool值用来定义处于发送状态还是接收状态,这里是先发送 count = 0 # 用于计数命名文件 while True: if bool == 0: # 客户端 print('waiting for file...') ip_addr = ("192.168.1.114", 9990) # 客户端绑定另一个电脑的ipv4地址,端口可换1024到50000以内的值 client = socket.socket() client.connect(ip_addr) def file_put(filedir): if os.path.isfile(filedir): file_name = filedir # 指定文件名称 file_size = os.stat(file_name).st_size # 计算文件大小 file_msg = {"action": "put", "name": file_name, "size": file_size} # 构建一个json文件 client.send(bytes(json.dumps(file_msg), encoding="utf-8")) # 发送传输需要的数据 print("文件名: %s --> 文件大小: %s " % (file_name, file_size)) with open(file_name, "rb") as f: for line in f: client.send(line) print("文件已发送: %s" % len(line)) print("文件发送完成...") if os.path.exists('state%s.json' % count): # 检测当前文件夹下是否存在该文件 file_put('state%s.json' % count) # 调用函数,传输文件 count += 1 bool = 1 else: time.sleep(1) # 如果文件不存在,等1s进行下次检测 elif bool == 1: # 服务端 print('listening...') ip_addr = ("192.168.1.165", 8888) # 绑定本地ipv4地址 server = socket.socket() server.bind(ip_addr) server.listen(5) # 连接队列长度,不用管 while True: # 尝试接收,如果失败则重试 try: conn, addr = server.accept() file_msg = conn.recv(20480) # 这个长度可以改为1024,和下面同时改 msg_data = json.loads(file_msg.decode('utf-8')) # 注意编解码方式相同 if msg_data.get("action") == "put": # 是PUT则执行上传 file_name = msg_data.get("name") file_size = msg_data.get("size") recv_size = 0 with open(file_name, "wb") as f: while recv_size != file_size: data = conn.recv(20480) f.write(data) recv_size += len(data) print("文件大小: %s 传输大小: %s" % (file_size, recv_size)) print("文件 %s 传输成功..." % file_size) bool = 0 break except: pass if __name__ == '__main__': main()

先接收的一方

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import socket import os import json import time def main(): bool = 1 # bool值用来翻转客户端和服务端 count = 0 while True: if bool == 0: # 客户端 print('waiting...') ip_addr = ("192.168.1.165", 8888) # 两台电脑互换地址 client = socket.socket() client.connect(ip_addr) def file_put(filedir): if os.path.isfile(filedir): file_name = filedir # 指定文件名称 file_size = os.stat(file_name).st_size # 计算文件大小 file_msg = {"action": "put", "name": file_name, "size": file_size} # 构建一个json文件 client.send(bytes(json.dumps(file_msg), encoding="utf-8")) # 发送传输需要的数据 print("文件名: %s --> 文件大小: %s " % (file_name, file_size)) with open(file_name, "rb") as f: for line in f: client.send(line) print("文件已发送: %s" % len(line)) print("文件发送完成...") if os.path.exists('action%s.json' % count): file_put('action%s.json' % count) # 调用函数,传输文件 count += 1 bool = 1 else: time.sleep(1) elif bool == 1: # 服务端 print('began listening...') ip_addr = ("192.168.1.114", 9990) server = socket.socket() server.bind(ip_addr) server.listen(5) while True: try: conn, addr = server.accept() file_msg = conn.recv(1024) msg_data = json.loads(file_msg.decode('utf-8')) if msg_data.get("action") == "put": # 是PUT则执行上传 file_name = msg_data.get("name") file_size = msg_data.get("size") recv_size = 0 with open(file_name, "wb") as f: while recv_size != file_size: data = conn.recv(1024) f.write(data) recv_size += len(data) print("文件大小: %s 传输大小: %s" % (file_size, recv_size)) print("文件 %s 传输成功..." % file_size) bool = 0 break except: pass if __name__ == '__main__': main()

这是我第一篇技术博客啦,好开心好开心,继续加油~~~!

最后

以上就是英俊帆布鞋最近收集整理的关于python实现socket互传json文件的全部内容,更多相关python实现socket互传json文件内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部