最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python聊天室(雖然很簡(jiǎn)潔,但是可以用)

 更新時(shí)間:2021年08月20日 10:54:29   作者:wangziwenhk  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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)前客戶(hù)端執(zhí)行一次‘收'來(lái)獲取
    except:
        new_s.close()#關(guān)閉當(dāng)前客戶(hù)端的套接字
        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')#如果接受到了客戶(hù)端發(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)前客戶(hù)端的套接字
            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),等待客戶(hù)端接入..........')
socket_list = []
while 1:
    #接入
    new_s,addr = s.accept()
    print('客戶(hù)端已接入')
    socket_list.append(new_s)
    new_s.send('請(qǐng)輸入昵稱(chē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()

客戶(hù)端

怎么樣,服務(wù)端是不是很簡(jiǎn)單?接下來(lái)我們做客戶(hù)端

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()
#線(xiàn)程
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命令行參數(shù)argparse模塊基本用法詳解

    python命令行參數(shù)argparse模塊基本用法詳解

    argparse?是python自帶的命令行參數(shù)解析包,可以用來(lái)方便地讀取命令行參數(shù),這篇文章主要介紹了python命令行參數(shù)-argparse模塊基本用法,需要的朋友可以參考下
    2023-01-01
  • np.random.seed() 的使用詳解

    np.random.seed() 的使用詳解

    這篇文章主要介紹了np.random.seed() 的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Pandas常用的數(shù)據(jù)結(jié)構(gòu)和常用的數(shù)據(jù)分析技術(shù)

    Pandas常用的數(shù)據(jù)結(jié)構(gòu)和常用的數(shù)據(jù)分析技術(shù)

    Pandas是Python中用于數(shù)據(jù)處理和分析的強(qiáng)大庫(kù),其最常用的數(shù)據(jù)結(jié)構(gòu)是Series和DataFrame。Series類(lèi)似于一維數(shù)組,可以表示一列數(shù)據(jù);DataFrame類(lèi)似于二維表格,可以表示多列數(shù)據(jù)
    2023-04-04
  • Python JSON模塊的使用詳情

    Python JSON模塊的使用詳情

    這篇文章主要介紹了Python JSON模塊的使用詳情,JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫(xiě)下面文章圍繞Python JSON模塊的相關(guān)資料展開(kāi)內(nèi)容,需要的小伙伴可以參考一下,希望 對(duì)你有所幫助
    2021-12-12
  • Python線(xiàn)程障礙對(duì)象Barrier原理詳解

    Python線(xiàn)程障礙對(duì)象Barrier原理詳解

    這篇文章主要介紹了Python線(xiàn)程障礙對(duì)象Barrier原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 全面了解django的緩存機(jī)制及使用方法

    全面了解django的緩存機(jī)制及使用方法

    這篇文章主要介紹了全面了解django的緩存機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • OpenAI?Function?Calling特性示例詳解

    OpenAI?Function?Calling特性示例詳解

    這篇文章主要為大家介紹了OpenAI?Function?Calling特性作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • windows上徹底刪除jupyter notebook的實(shí)現(xiàn)

    windows上徹底刪除jupyter notebook的實(shí)現(xiàn)

    這篇文章主要介紹了windows上徹底刪除jupyter notebook的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python神經(jīng)網(wǎng)絡(luò)tensorflow利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè)

    python神經(jīng)網(wǎng)絡(luò)tensorflow利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè)

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)tensorflow利用訓(xùn)練好的模型進(jìn)行預(yù)測(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python數(shù)據(jù)的標(biāo)準(zhǔn)輸出與格式化輸出

    Python數(shù)據(jù)的標(biāo)準(zhǔn)輸出與格式化輸出

    這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)的標(biāo)準(zhǔn)輸出與格式化輸出的相關(guān)資料,和大多數(shù)語(yǔ)言一樣,Python也是用print()函數(shù)來(lái)進(jìn)行輸出,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

思茅市| 高邑县| 罗源县| 焉耆| 金沙县| 绥棱县| 获嘉县| 沅陵县| 黎平县| 安国市| 句容市| 罗田县| 榆林市| 河池市| 牙克石市| 攀枝花市| 稻城县| 阜城县| 太湖县| 随州市| 高雄县| 黑河市| 泰宁县| 台东县| 蓬溪县| 五台县| 凤阳县| 高陵县| 阿勒泰市| 武邑县| 阜城县| 宁河县| 宣恩县| 宁津县| 瑞昌市| 保定市| 措美县| 新绛县| 瑞昌市| 鲁山县| 营山县|