日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python使用socket实现局域网传输数据(附加json数据传输及解析)以及判断socket是否断开连接

發布時間:2025/3/19 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python使用socket实现局域网传输数据(附加json数据传输及解析)以及判断socket是否断开连接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 本機實現服務端和客戶端的通信并傳輸字符串數據

1.1 服務端

# -*- coding: utf-8 -*- import socketserver = 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'breakif exit == 'break':break server.close() # 關閉服務器

?

1.2?客戶端

# -*- coding: utf-8 -*- import socketclient = socket.socket() client.connect(('localhost', 1666)) # 設置連接的服務器的IP和端口while True:str = input("請輸入數據: ")client.send(str.encode('utf-8')) # 設置編碼為utf-8client.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'breakif exit == 'break':break server.close()

2.4 程序以及運行效果如下

?

3. socket連接斷開判斷

問題: 當客戶端斷開連接后,服務端會一直輸出空數據,停不下來。

解決:通過判斷接收到的數據是否為空字符串即可,可能同學們會疑問,如果我客戶端傳的就是空串,那不就直接退出了?其實你不用擔心,如果客戶端發送的空字符串,服務端還是等待接收,并不會往下執行。而且,你發不了空串,就如QQ不能直接回車發送一樣,如下圖。

總結

以上是生活随笔為你收集整理的Python使用socket实现局域网传输数据(附加json数据传输及解析)以及判断socket是否断开连接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。