我是靠谱客的博主 要减肥自行车,最近开发中收集的这篇文章主要介绍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是否断开连接所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部