當前位置:成語大全網 - 新華字典 - python中使用socket編程,如何能夠通過UDP傳遞壹個列表類型的數據?

python中使用socket編程,如何能夠通過UDP傳遞壹個列表類型的數據?

Python中的 list 或者 dict 都可以轉成JSON字符串來發送,接收後再轉回來。

首先

import?json

然後,把 list 或 dict 轉成 JSON

json_string?=?json.dumps(list_or_dict)

如果妳用的是Python3,這裏的 json_string 會是 str 類型(即Python2的unicode類型),可能需要編碼壹下:

if type(json_string) == six.text_type:

json_string = json_string.encode('UTF-8')

用socket發送過去,例如

s.sendto(json_string,?address)

對方用socket接收,例如

json_string,?addr?=?s.recvfrom(2048)

把JSON轉成 list 或 dict?

list_or_dict?=?json.loads(json_string)

下面是個完整的例子:

client.py

#!/usr/bin/env?python

#?-*-?coding:?UTF-8?-*-

import?socket

import?json

import?six

address?=?('127.0.0.1',?31500)

s?=?socket.socket(socket.AF_INET,?socket.SOCK_DGRAM)

mylist?=?[1,?2,?3,?4,?5,?6,?7,?8,?9,?10]

json_string?=?json.dumps(mylist)

if?type(json_string)?==?six.text_type:

json_string?=?json_string.encode('UTF-8')

s.sendto(json_string,?address)

s.close()

server.py

#!/usr/bin/env?python

#?-*-?coding:?UTF-8?-*-

import?socket

import?json

address?=?('127.0.0.1',?31500)

s?=?socket.socket(socket.AF_INET,?socket.SOCK_DGRAM)

s.bind(address)

json_string,?addr?=?s.recvfrom(2048)

mylist?=?json.loads(json_string)

print(mylist)

s.close()

請先運行server.py,再運行client.py