我是靠谱客的博主 要减肥自行车,最近开发中收集的这篇文章主要介绍Python使用socket实现局域网传输数据(附加json数据传输及解析)以及判断socket是否断开连接,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1 本机实现服务端和客户端的通信并传输字符串数据
1.1 服务端
# -*- coding: utf-8 -*-
import socket
server = socket.socket()
server.bind(('localhost', 1666)) # 将socket绑定到本机IP并且设定一个端口
server.listen(5) # 设置可以监听5个连接
exit = ''
while True:
con, addr = server.accept() # 会一直等待,直到连接客户端成功
print('连接到: ', addr)
while con:
msg = con.recv(1024).decode('utf-8') # 接受数据并按照utf-8解码
print('收到的数据是: ', msg)
print('收到的数据类型是: ',type(msg))
if msg == 'break':
con.close() # 关闭本次连接
exit = 'break'
break
if exit == 'break':
break
server.close() # 关闭服务器
1.2 客户端
# -*- coding: utf-8 -*-
import socket
client = socket.socket()
client.connect(('localhost', 1666)) # 设置连接的服务器的IP和端口
while True:
str = input("请输入数据: ")
client.send(str.encode('utf-8')) # 设置编码为utf-8
client.close()
1.3 程序运行效果
先执行服务端程序,再运行客户端程序即可,效果如下图所示。
2. 使用json传输字典dict数据并解析
2.1 不使用json传输字典dict的问题
不使用json传输字典数据,我们只需要使用eval()函数将要发送的字符串转化为字典类型即可,如下图。
然后运行结果如下图
提示其实是表达,传输的数据应该是字节数据,而不是字典dict,所以我们不能直接传输字典数据,那我们接下来使用json来进行格式化和解析,程序如下。
2.2 客户端
# -*- coding: utf-8 -*-
import socket
import json # 导入json包
client = socket.socket()
client.connect(('localhost', 1666)) # 设置连接的服务器的IP和端口
while True:
str = input("请输入数据: ")
dict_data = eval(str) # json格式化不对字符串类型有效
# 所以使用eval函数先将字符串转化为dict类型
json_data = json.dumps(dict_data) # json对dict进行格式化
client.send(json_data.encode('utf-8')) # 设置编码为utf-8并转换为字节流
client.close()
2.3 服务端
# -*- coding: utf-8 -*-
import socket
import json # 导入json包
server = socket.socket()
server.bind(('localhost', 1666)) # 将socket绑定到本机IP并且设定一个端口
server.listen(5) # 设置可以监听5个连接
exit = ''
while True:
con, addr = server.accept() # 会一直等待,直到连接客户端成功
print('连接到: ', addr)
while con:
msg = con.recv(1024).decode('utf-8') # 接受数据并按照utf-8解码
print('收到的数据是: ', msg)
print('收到的数据类型是: ',type(msg))
msg = json.loads(msg) # json对数据进行解析,得到dict数据
for i in msg.keys():
if isinstance(msg[i], dict):
for j in msg[i].keys():
print('key ', j, ' with value ', msg[i][j])
if msg == 'break':
con.close()
exit = 'break'
break
if exit == 'break':
break
server.close()
2.4 程序以及运行效果如下
3. socket连接断开判断
问题: 当客户端断开连接后,服务端会一直输出空数据,停不下来。
解决:通过判断接收到的数据是否为空字符串即可,可能同学们会疑问,如果我客户端传的就是空串,那不就直接退出了?其实你不用担心,如果客户端发送的空字符串,服务端还是等待接收,并不会往下执行。而且,你发不了空串,就如QQ不能直接回车发送一样,如下图。
最后
以上就是要减肥自行车为你收集整理的Python使用socket实现局域网传输数据(附加json数据传输及解析)以及判断socket是否断开连接的全部内容,希望文章能够帮你解决Python使用socket实现局域网传输数据(附加json数据传输及解析)以及判断socket是否断开连接所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复