python聊天室(雖然很簡(jiǎn)潔,但是可以用)
python聊天室
很多人都覺(jué)得微信,QQ,ICQ(我不知道現(xiàn)在還能不能用了)都過(guò)于垃圾,想要自己做一個(gè)聊天室(或是聊天軟件),所以我們可以自己做一個(gè)。
想要做出聊天室(或是聊天軟件),我們就需要搞清楚它們的原理,這里我們用一個(gè)圖片

來(lái)給你們看
我們可以看到,服務(wù)端其實(shí)就只是起到了一個(gè)轉(zhuǎn)發(fā)消息的原理,搞清楚原理,就開(kāi)始做
服務(wù)端
import socket,threading #導(dǎo)入文件
def shou(new_s,socket_list):#創(chuàng)建一個(gè)收的函數(shù)
try:
nikename = new_s.recv(1024).decode('utf-8').strip()#為當(dāng)前客戶端執(zhí)行一次‘收'來(lái)獲取
except:
new_s.close()#關(guān)閉當(dāng)前客戶端的套接字
socket_list.remove(new_s)#去除套接字列表里的nes_s
for i in socket_list:
i.send('\n公告:一個(gè)未知的人離開(kāi)了聊天室......'.encode('utf-8'))#廣播
return None
for i in socket_list:
i.send(f'\n公告:歡迎{nikename}進(jìn)入了聊天室........\n'.encode('utf-8'))#廣播
while 1:
try:
recv_data = new_s.recv(1024).decode('utf-8')#如果接受到了客戶端發(fā)來(lái)的信息
print(recv_data)#僅作提醒用
for i in socket_list:
i.send(f'{nikename}:{recv_data}'.encode('utf-8'))#廣播
except:
new_s.close()#關(guān)閉當(dāng)前客戶端的套接字
socket_list.remove(new_s)#去除套接字列表里的nes_s
for i in socket_list:
i.send(f'公告:{nikename}離開(kāi)了聊天室......'.encode('utf-8'))#廣播
break#跳出循環(huán)
def fa(new_s):
while 1:
msg = input('')#發(fā)出
new_s.send(msg.encode('utf-8'))
#創(chuàng)建套接字
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#綁定
s.bind(("",5678))#端口
#監(jiān)聽(tīng)
s.listen(5)
print('服務(wù)端處于監(jiān)聽(tīng)狀態(tài),等待客戶端接入..........')
socket_list = []
while 1:
#接入
new_s,addr = s.accept()
print('客戶端已接入')
socket_list.append(new_s)
new_s.send('請(qǐng)輸入昵稱:'.encode('utf-8'))
t1 = threading.Thread(target=shou,args=(new_s,socket_list))
t2 = threading.Thread(target=fa,args=(new_s,))
t1.start()
t2.start()
# new_s.close()
# s.close()
客戶端
怎么樣,服務(wù)端是不是很簡(jiǎn)單?接下來(lái)我們做客戶端
import socket,threading
import tkinter as tk
#創(chuàng)建套接字
a = 1
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("127.0.0.1",5678))#此處端口看服務(wù)端的端口,127.0.0.1要改成服務(wù)端主機(jī)的ipv4地址
print('已鏈接服務(wù)端,通訊加密中')
def shou(s,msg_texe):
recv_data = s.recv(1024).decode('utf-8')
msg_text.insert(tk.END, recv_data)
while 1:
recv_data = s.recv(1024).decode('utf-8')
msg_text.insert(tk.END,recv_data)
def fa():
global a
if a == 0:
msg = input_text.get('0.0',tk.END)
s.send(msg.encode('utf-8'))
input_text.delete('0.0',tk.END)
else:
msg = input_text.get('0.0', tk.END)
s.send(msg.encode('utf-8'))
input_text.delete('0.0', tk.END)
msg_text.delete('0.0', tk.END)
a = 0
app = tk.Tk()
app.title('聊天室')
#顯示消息框
msg_frame = tk.Frame(app,width=480,height=300)
msg_frame.grid(row=0,column=0,padx=6,pady=6)
msg_frame.grid_propagate(0)#固定Frame的大小
msg_text = tk.Text(msg_frame,bg='white')
msg_text.grid()
# msg_text.insert('0.0','hhh')
#輸入
input_frame = tk.Frame(app,width=480,height=100)
input_frame.grid(row=1,column=0)
input_frame.grid_propagate(0)
input_text = tk.Text(input_frame,bg='white')
input_text.grid()
#發(fā)送按鈕
btn_frame = tk.Frame(app,width=480,height=20)
btn_frame.grid(row=2,column=0,sticky='E')
button = tk.Button(btn_frame,text='發(fā)送',command=fa)
button.grid()
#線程
t1 = threading.Thread(target=shou,args=(s,msg_text))
t1.daemon = True
t1.start()
app.mainloop()
#s.close()
伸手黨下載鏈接:https://pan.baidu.com/s/1KD6p_a2KgFxbOVN5yftQRw
提取碼:2iwk
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
python 尋找list中最大元素對(duì)應(yīng)的索引方法
今天小編就為大家分享一篇python 尋找list中最大元素對(duì)應(yīng)的索引方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Python實(shí)現(xiàn)url長(zhǎng)短鏈接的轉(zhuǎn)換
短鏈接,通俗來(lái)說(shuō),就是將長(zhǎng)的URL網(wǎng)址,通過(guò)程序計(jì)算等方式,轉(zhuǎn)換為簡(jiǎn)短的網(wǎng)址字符串。本文將用Python語(yǔ)言實(shí)現(xiàn)這一效果,需要的可以參考一下2022-11-11
使用PyTorch實(shí)現(xiàn)去噪擴(kuò)散模型的完整代碼
在本文中,我們將深入研究DDPM的復(fù)雜性,涵蓋其訓(xùn)練過(guò)程,包括正向和逆向過(guò)程,并探索如何執(zhí)行采樣,在整個(gè)探索過(guò)程中,我們將使用PyTorch從頭開(kāi)始構(gòu)建DDPM,并完成其完整的訓(xùn)練,需要的朋友可以參考下2024-01-01
Python爬蟲基于lxml解決數(shù)據(jù)編碼亂碼問(wèn)題
這篇文章主要介紹了Python爬蟲基于lxml解決數(shù)據(jù)編碼亂碼問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Python內(nèi)建類型dict深入理解源碼學(xué)習(xí)
這篇文章主要為大家介紹了Python內(nèi)建類型dict的深入理解及源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
利用Python實(shí)現(xiàn)眨眼計(jì)數(shù)器的示例代碼
這篇文章主要介紹了如何使用Python語(yǔ)言實(shí)現(xiàn)對(duì)視頻中的人物的眨眼進(jìn)行計(jì)數(shù)并描繪在圖表中,文中的實(shí)現(xiàn)步驟講解詳細(xì),感興趣的可以動(dòng)手試一試2022-02-02
在python帶權(quán)重的列表中隨機(jī)取值的方法
今天小編就為大家分享一篇在python帶權(quán)重的列表中隨機(jī)取值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
一文了解Python并發(fā)編程的工程實(shí)現(xiàn)方法
這篇文章主要介紹了Python并發(fā)編程的工程實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05

