• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 基于Python+TCP/IP的簡易聊天室

    標簽: python  socket

    基于Python+TCP/IP的簡易聊天室

    首先我們要了解TCP/IP連接的過程

    服務器

    1 創建套接字

    tcpSerSock=socket(AF_INET,SOCK_STREAM)
    

    2 bind一個地址,因為沒有服務器,所以綁定了本地地址和端口

    tcpSerSock.bind(Addr)
    Addr=(Host,Port)
    

    3 開始監聽客戶端,參數為監聽的個數

    tcpSerSock.listen(5)
    

    4 append到客戶端

    sockets.append(tcpCliSock)
    

    5 然后就是發送字節和接收字節的事

    data=tcpCliSock.recv(1024)#接收字節
    socket.send(data)#發送字節
    

    6 最后要關閉連接和關閉套接字

    tcpCliSock.close()
    

    客戶端

    1 創建TCP/IP套接字

    tcpCliSock=socket(AF_INET,SOCK_STREAM)
    

    2 連接服務器,連接的是本地服務器

    Host='localhost'
    Port=10000
    Addr=(Host,Port)
    tcpCliSock.connect(Addr)
    

    3 進行發送和接收字節

    recv_data=tcpCliSock.recv(1024)
    tcpCliSock.send(msg.encode('utf-8'))
    

    4 最后也要記得關閉連接

    tcpCliSock.close()
    

    如果想要多人同時聊天,要加入多線程
    然后在封裝的函數里啟用多線程

    最后全部的代碼

    服務器:

    
    from socket import *
    from time import ctime
    from threading import Thread
    sockets=[]
    
    Host=''
    Port=10000
    Addr=(Host,Port)
        
    tcpSerSock=socket(AF_INET,SOCK_STREAM)
    tcpSerSock.bind(Addr)
    tcpSerSock.listen(5)
        
    
    def main():
        while True:
            print("waiting for connection...")
            tcpCliSock,addr=tcpSerSock.accept()
            sockets.append(tcpCliSock)
            print('connected from:',addr,ctime())
            t=Thread(target=readMsg,args=(tcpCliSock,))
            t.start()
            
            
    def readMsg(tcpCliSock):
        while True:
            data=tcpCliSock.recv(1024)
            if data.decode('utf-8').endswith('bye'):
                sockets.remove(tcpCliSock)
                tcpCliSock.close()
                print('有客戶端退出')
                
                break
            
            for socket in sockets:
                socket.send(data)
            
        tcpCliSock.close()
        
    
            
    if __name__=='__main__':
        main()
    

    客戶端:

    
    from socket import *
    from time import ctime
    from threading import Thread
    flag=True
    
    Host='localhost'
    Port=10000
    Addr=(Host,Port)
        
    tcpCliSock=socket(AF_INET,SOCK_STREAM)
    tcpCliSock.connect(Addr)
    
    name=input ('請輸入用戶名:')
    def readMsg(tcpCliSock):
        while flag:
            recv_data=tcpCliSock.recv(1024)
            print(recv_data.decode('utf-8'))
    
    def writeMsg(tcpCliSock):
        global flag
        while flag:
            msg=input('>')
            msg=name+':'+msg
            tcpCliSock.send(msg.encode('utf-8'))
            if msg.endswith('bye'):
                flag=False
                break
    
    t1=Thread(target=readMsg,args=(tcpCliSock,))
    t1.start()
    
    t2=Thread(target=writeMsg,args=(tcpCliSock,))
    t2.start()
    t1.join()
    t2.join()
    tcpCliSock.close()
    

    只要啟動,然后輸入名字,就能進行聊天了

    服務器和客戶端了解界面

    Alt

    版權聲明:本文為weixin_44502769原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_44502769/article/details/110929348

    智能推薦

    Redis簡易聊天室

    運行截圖:...

    簡易群發聊天室

    服務器: 第一步:實例化Socket服務器,并指定端口通訊 第二步:主線程在循環中監聽多個客戶端的連接,并將每個客戶端連接保存到連接集合中 第三步:實例化接收數據子線程對象,每建立一個連接,則啟動一個子線程來處理數據的接收和廣播 客戶端: 第一步:實例化客戶端socket對象,并建立和服務器端的通信管理 第二步:通過socket拿流,用來傳輸數據 運行截圖:...

    Java簡易聊天室

    Chat Server服務器代碼片`. ChatClient 客戶端代碼: cmd執行Java程序,以管理員執行cmd 圖片:...

    websocket簡易聊天室

    簡易聊天室 POM 配置 后端 前端 頁面 基于websocket 使用Spring Boot 完成簡易的聊天室功能。 POM 配置 后端 前端 頁面...

    簡易聊天室源碼

    很好奇,微信是怎么實現聊天的呢?于是乎,研究了一下,共享源碼!                        ...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡