网络程序设计实验-简版
-
互相通信
-
UI界面
不多说了 上代码
from tkinter import * import time import socket import threading def send_msg(): dest_ip = L1.get() dest_port =int(L2.get()) send_data = L5.get() Server.sendto(send_data.encode("gbk"), (dest_ip, dest_port)) t.insert(END,time.strftime("%H:%M:%S", time.localtime())+'\n\n'+'KyPianistC'+' : '+send_data+'\n\n') #L2.delete(0,END) def run(): try: while True: recv_data = Server.recvfrom(1024) data = recv_data[0].decode("gbk") t.insert(END,time.strftime("%H:%M:%S", time.localtime())+'\n\n'+L1.get()+':'+L2.get()+' '+data+'\n\n') except: t.insert(END,time.strftime("%H:%M:%S", time.localtime())+' '+'信息接收失败'+'\n\n') b = threading.Thread(target=run) def kk(): try: t.insert(END,'Listening On '+L3.get()+':'+L4.get()+'\n\n') t.insert(END,time.strftime("%H:%M:%S", time.localtime())+' '+'准备就绪'+'\n\n') b.start() except: t.insert(END,time.strftime("%H:%M:%S", time.localtime())+' '+'线程启动失败'+'\n\n') top = Tk() top.geometry('450x500') top.title('TK Server') t = Text(top) t.pack() Z1 = Label(top,text="目标ip地址端口") Z1.place(x=250,y=350) L1_text = StringVar() L1 = Entry(top,textvariable=L1_text) L1_text.set("127.0.0.1") L1.place(x=250,y=370) L2_text = StringVar() L2 = Entry(top,textvariable=L2_text) L2_text.set(1289) L2.place(x=250,y=400) Z2 = Label(top,text="本机ip地址端口") Z2.place(x=40,y=350) L3_text = StringVar() L3 = Entry(top,textvariable=L3_text) L3_text.set("127.0.0.1") L3.place(x=40,y=370) L4_text = StringVar() L4 = Entry(top,textvariable=L4_text) L4_text.set(1288) L4.place(x=40,y=400) L5 = Entry(top) L5.place(x=40,y=440) Server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) ip = L3.get() port = int(L4.get()) Server.bind((ip,port)) Button1 = Button(top,text='发送',command=send_msg) Button1.place(x=350,y=450) But = Button(top,text='接受信息',command=kk) But.place(x=280,y=450) top.mainloop()
-
两个程序的代码是一样的 (端口不一样)
-
点击 “接受信息”按钮,才可以接收到信息
-
运行截图
-
可能遇到的问题
- 出现错误 OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。这是因为:虽然python的运行窗口关闭了 但是python程序并没有关闭。可以修改源程序的端口,或者是打开windows任务管理器,关闭名为"python"的程序