鱼C论坛

 找回密码
 立即注册
查看: 1835|回复: 10

[吹水] 多线程图形化聊天程序

[复制链接]
发表于 2023-7-7 16:18:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
@歌者文明清理员 @sfqxx @Mike_python小 @猪猪虾 @高山 @python爱好者. @zhangjinxuan @陶远航 @yinda_peng @wuna

这不假叽叽歪歪想弄一个多线程程序嘛,去网上查了一下,是很难弄,写完不知道有没有漏洞

你们可以登录进去测试一下,也请@Mike_python小 指导
  1. #客户端
  2. import tkinter
  3. from tkinter import font
  4. import tkinter.messagebox
  5. import socket
  6. import threading
  7. import time

  8. string=''
  9. def my_string(s_input):
  10.     string = s_input.get()

  11. def Send(sock):
  12.     '''
  13.         发送数据的方法
  14.         参数:
  15.             sock:定义一个实例化socket对象
  16.             server:传递的服务器IP和端口
  17.     '''
  18.     if string!='':
  19.         message = name + ' : ' + string
  20.         data = message.encode('utf-8')
  21.         sock.send(data)
  22.         if string.lower() == 'EXIT'.lower():
  23.             exit()


  24. def recv(sock):
  25.     sock.send(name.encode('utf-8'))
  26.     while True:
  27.         data = sock.recv(1024)
  28.         #加一个时间戳
  29.         time_tuple = time.localtime(time.time())
  30.         str = ("{}点{}分".format(time_tuple[3],time_tuple[4]))
  31.         rrecv = tkinter.Label(t,text=data.decode('utf-8'),width=40,anchor='w',bg='pink')#接收的消息靠左边
  32.         rrecv.pack()

  33. def left():
  34.     global string
  35.     string = rv1.get()
  36.     Send(s)
  37.     if string!='':
  38.         rleft = tkinter.Label(t,text=string,width=40,anchor='e')#发送的消息靠右边
  39.         rleft.pack()
  40.         rv1.set('')

  41. def Creat():
  42.     global name
  43.     name = n.get()
  44.    
  45.     #接收进程
  46.     tr = threading.Thread(target=recv, args=(s,), daemon=True)
  47.     # daemon=True 表示创建的子线程守护主线程,主线程退出子线程直接销毁
  48.     tr.start()
  49.      
  50.     l.destroy()
  51.     e.destroy()
  52.     b.destroy()
  53.     t.title("聊天室")
  54.     t.geometry("500x600")
  55.     rL0 = tkinter.Label(t,text='%s的聊天室'%name,width=40)
  56.     rL0.pack()
  57.     rL1 = tkinter.Label(t,text='请输入消息:',width=20, height=1)
  58.     rL1.place(x=0,y=450)
  59.     rE1 = tkinter.Entry(t, textvariable = rv1)
  60.     rE1.place(x=200,y=450)
  61.     rB1 = tkinter.Button(t, text="发送",command=left)  
  62.     rB1.place(x=380,y=450)
  63.     #发送进程

  64. def JieShu():
  65.     tkinter.messagebox.showwarning(title='你确定退出吗?', message='刚才你点击了关闭按钮')
  66.     s.send("error1".encode('utf-8'))
  67.     exit(0)   
  68.    
  69. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   
  70. server = ('10.100.207.40', 9999)
  71. s.connect(server)#建立连接
  72. t=tkinter.Tk()
  73. t.title("多人聊天室")
  74. t.geometry("300x200+500+200")
  75. l = tkinter.Label(t,text='多人聊天室欢迎您,请输入你的名称',width=40, height=8)
  76. l.pack()
  77. n = tkinter.StringVar()
  78. e = tkinter.Entry(t, width=15,textvariable = n)
  79. e.pack()
  80. rv1 = tkinter.StringVar()
  81. name = n.get()

  82. b = tkinter.Button(t, text="登录",width=40, height=10,command=Creat)

  83. b.pack()
  84. t.protocol("WM_DELETE_WINDOW", JieShu)
  85. t.mainloop()

  86. s.close()
复制代码
其中要注意的是,需要安装GUI
pip install wxPython

pip install PyGTK

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-7 16:19:58 | 显示全部楼层
支持,顶一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-7 16:20:40 | 显示全部楼层

谢谢,我这边有点小麻烦,因为admin登录是正常的,但是客户端会报错,说响应超时
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 17:49:37 | 显示全部楼层
???
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-7 17:52:55 | 显示全部楼层
4.png

py version 3.9.9
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 18:27:32 | 显示全部楼层

你一起安装干嘛?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 18:36:57 | 显示全部楼层
sfqxx 发表于 2023-7-7 18:27
你一起安装干嘛?

一起还是分开都一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 18:37:37 | 显示全部楼层

O
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-7 18:48:54 | 显示全部楼层

报错嘛,你试一下客户端的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 20:33:12 | 显示全部楼层
  1. Traceback (most recent call last):
  2.   File "c:\Users\Qin\Desktop\Programes\test.py", line 78, in <module>
  3.     s.connect(server)#建立连接
  4. TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
复制代码


没开吗?

我看你这代码比我写的好多了我那个好多都是大绕弯,后来我查问题的时候可愁死我了
对了,发个截图看看呗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-7 21:08:29 | 显示全部楼层
Mike_python小 发表于 2023-7-7 20:33
没开吗?

我看你这代码比我写的好多了我那个好多都是大绕弯,后来我查问题的时候可愁死我 ...

啊哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表