Python小实战,局域网聊天系统

服务端 (优先开启)

#!/usr/local/bin/python
import sys
import os
from socket import *
import threading
host = '' #监听所有的ip
port = 12341 #接口必须一致
bufsize = 1024
addrlist = list()
addr = (host,port)
udpServer = socket(AF_INET,SOCK_DGRAM)
udpServer.bind(addr) #绑定地址
while True:
    data,clientaddr = udpServer.recvfrom(bufsize)  #接收数据 自动阻塞 等待客户端请求:
    data = data.decode(encoding='utf-8')
    print('客户端的来信:',data,clientaddr)
    if clientaddr not in addrlist:
        addrlist.append(clientaddr)
    for i in addrlist:
        udpServer.sendto(data.encode(encoding='utf-8'),i)
udpServer.close()
os.system("pause")

MainPage.py页面 

#!/usr/local/bin/python
import sys
import os
from  tkinter import * #导入TKinter模块
from socket import *
import threading
class MainPage(object):
    def __init__(self,name,master=None):
        self.name = name
        
        self.root = master #定义内部变量root
        self.root.geometry("500x300") #设置窗口尺寸
        self.bufsize = 1024  #定义缓冲大小
        self.serveraddr = ('127.0.0.1',13141) # 服务器ip,端口,元祖形式
        self.udpClient = socket(AF_INET,SOCK_DGRAM) #创建客户端
        self.udpClient.bind(self.serveraddr)
        self.content = list()
        self.createPage()
    def createPage(self):
        self.frame1=Frame(self.root)
        self.frame2=Frame(self.root)
        self.frame1.pack()
        self.frame2.pack(side=BOTTOM)
        self.inp_text=Entry(self.frame2,width=60) #创建输入框(输入聊天内容)
        self.btn = Button(self.frame2,text="发送",width=15,command=self.sendmsg) #绑定获取文本框内容方法
        self.inp_text.pack(side=LEFT)
        self.btn.pack(side=LEFT)
    def sendmsg(self):
        self.get_inp = self.inp_text.get() #获取输入框内容
        if self.get_inp:
            self.get_inp = self.name+':' + self.get_inp #添加姓名标示
            self.get_inp = self.get_inp.encode(encoding="utf-8")
            self.udpClient.sendto(self.get_inp,self.serveraddr) # 发送数据
            self.inp_text.delete('0','end')
    def recvmsg(self):
        
        self.data,self.addr = self.udpClient.recvfrom(self.bufsize) #接收数据和返回地址
        
        self.data = self.data.decode(encoding="utf-8")
        self.content.append(self.data+'\n')
        self.ss=''.join(self.content)
        return self.data
 
class myThread(threading.Thread):
    def __init__(self,id,mypage = None):
        self.mypage = mypage    #获取MainPage的实例化对象
        threading.Thread.__init__(self)
        self.id=id
    def run(self):
        if self.id == 1:
            while True:
                self.ss = self.mypage.recvmsg()
                if  self.ss:
                    print(self.ss)
                    self.mypage.text=Label(self.mypage.frame1,text=self.ss) #创建聊天内容标签
                    self.mypage.text.pack(side=TOP,padx=1)
 
 
os.system("pause")

LoginPage.py登录界面

#!/usr/local/bin/python
import sys
import os
from tkinter import *
from tkinter.messagebox import *
from MainPage import *
 
class LoginPage(object):
    def __init__(self,master=None):
        self.root = master #定义内部变量root
        self.root.geometry("300x180") #设置窗口大小
        self.username = StringVar()
        self.password = StringVar()
        self.createPage()
    def createPage(self):
        self.page = Frame(self.root) #创建Frame
        self.page.pack()
        Label(self.page).grid(row=0, stick=W)
        Label(self.page, text = '账户: ').grid(row=1, stick=W, pady=10)
        Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
        Label(self.page, text = '密码: ').grid(row=2, stick=W, pady=10)
        Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E)
        Button(self.page, text='登陆', command=self.loginCheck).grid(row=3, stick=W, pady=10)
        Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=1, stick=E)
    def loginCheck(self):
        name = self.username.get()
        secret = self.password.get()
        if secret=='123456':
            self.page.destroy()
            mypage = MainPage(name,self.root)
            thread1 = myThread(1,mypage)
            thread1.start()
        else:
            showinfo(title='错误', message='账号或密码错误!')
os.system("pause")

main.py

#!/usr/local/bin/python
import sys
import os
from tkinter import *
from LoginPage import *
root = Tk()
root.title('聊天室')
LoginPage(root)
root.mainloop()
os.system("pause")

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值