计算机网络是人类文明进步的重要因素
本示例用一个窗体程序做客户端,服务端程序收到报文后直接在控制台打印表示收到了报文
客户端:
# - Tutorial 12.1
# - 2020-2-8
# - Johan
# - 题目:
# 1、客户端程序
from tkinter import *
from socket import *
class Client:
def __init__(self):
window = Tk()
window.title('客户端')
window.geometry('240x120')
var = StringVar()
frame = Frame(window)
frame.pack(fill=X)
label_msg = Label(frame, text='消息:')
label_msg.grid(row=1, column=0)
entry_msg = Entry(frame, textvariable=var)
entry_msg.grid(row=1, column=1)
button = Button(frame, text='发送', width=20,
command=lambda: self.send_msg(var.get()))
button.grid(row=2, column=1)
window.mainloop()
# 发送消息
def send_msg(self, msg):
host = '127.0.0.1' # 目的IP
port = 34601 # 目的端口号
dst_ip = (host, port)
udp_client_socket = socket(AF_INET, SOCK_DGRAM)
udp_client_socket.sendto(msg.encode('utf-8'), dst_ip)
print('Send >>> %s' % msg)
# Main
Client()
服务端:
# - Tutorial 12.2
# - 2020-2-8
# - Johan
# - 题目:
# 1、服务端程序
from socket import *
host = '' # 监听时IP可不指定
port = 34601 # 监听的端口号
src_ip = (host, port)
buff = 1024
udp_server_socket = socket(AF_INET, SOCK_DGRAM)
udp_server_socket.bind(src_ip)
print('Server started...')
while True:
data, ip = udp_server_socket.recvfrom(buff)
print('[From %s]%s' % (ip[0], data.decode('utf-8')))
udp_server_socket.close()
运行结果:
有兴趣的可以自己改一下代码,看一下不进行data.decode()操作时,原本的报文内容呗Python用什么数据结构保存
对传输内容有格式要求的,可以了解一下按json格式的文本传输,Python有很方便的解析json的包,解析结果是一个字典类型