tkinter+socket实现基本的实时收发消息

tkinter+sockte实现基本的实时收发

tkinter

tkinter是比较简单的GUI界面设计块,有许多控件基本能实现很多简单的功能,比如很多应用软件安装时的GUI都可以实现。

在这个的功能里只用到模块的按钮(Button)、输入框(Entry)、输出框(Text)功能。

socket

socket用来创建服务器和客户端。

服务端代码

from tkinter import *
from socket import *
import threading
import time
class myapp(Tk):
    def __init__(self):
        super().__init__()
        self.title("完形填空")
        self.geometry("240x240")
        self.s=socket(AF_INET,SOCK_STREAM)
        self.host=''
        self.port=6666
        self.addr=(self.host,self.port)
        self.s.bind(self.addr)
        self.s.listen(5)
        self.entry=Entry(self)
        self.entry.place(x=0,y=0,width=240,height=60)
        b1=Button(self,text="连接",command=self.lianjie)
        b1.place(x=0,y=60,width=120,height=60)
        b2=Button(self,text="发送",command=self.fasong)
        b2.place(x=120,y=60,width=120,height=60)
        self.text=Text(self)
        self.text.place(x=0,y=120,width=240,height=120)
    def lianjie(self):
        self.tap,self.addr=self.s.accept()
        print(self.addr)
        t1=threading.Thread(target=self.jianting).start()
        
        
    def fasong(self):
        date=self.entry.get()
        self.tap.send(date.encode())
    def jianting(self):
        while True:
            sou=self.tap.recv(1024)
            if  sou:
                self.text.insert(END,sou.decode()+'\n')
            else :
                time.sleep(1)

if __name__ =='__main__':
    ap=myapp()
    ap.mainloop()



客户端代码

from tkinter import *
from socket import *
import threading
import time
class myapp(Tk):
    def __init__(self):
        super().__init__()
        self.title("完形填空")
        self.geometry("240x240")
        #self.host='192.168.100.4'
        #self.port=6666
        self.text=Text(self)
        self.text.place(x=0,y=120,width=240,height=60)
        self.add=('192.168.100.4',6666)
        self.s=socket(AF_INET,SOCK_STREAM)
        self.entry=Entry(self)
        self.entry.place(x=0,y=0,width=240,height=60)
        b1=Button(self,text="连接",command=self.lianjie)
        b1.place(x=0,y=60,width=120,height=60)
        b2=Button(self,text="发送",command=self.fasong)
        b2.place(x=120,y=60,width=120,height=60)
    def lianjie(self):
        self.s.connect(self.add)
        t1=threading.Thread(target=self.xunhuan).start()
    def xunhuan(self):
        
        while True:
            date=self.s.recv(1024)
            if date:
                self.text.insert(END,date.decode()+'\n')
            else :
                time.sleep(1)
    def fasong(self):
        date=self.entry.get()
        self.s.send(date.encode())
if __name__=='__main__':
    ap=myapp()
    ap.mainloop()
使用说明

服务端不用管,直接C和V就行
客户端需要更改一下’192.168.100.4’,将它改成服务端的ip地址即可。

两个程序的GUI界面都是一样的界面

上方空白处时Entry输入框,下方空白是输出框,服务端的按钮是打开服务器,客户端的按钮则是连接服务器。
在Entry中输入内容后,点击发送即可在另一方的输出端输出。

这是本人在学习tkinter和socke的一次学习记录,有任何问题或者想要讨论请加445532989,学习路上不孤单,谢谢大家。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值