国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python 使用socket制作聊天室-(附帶 源碼 可以直接運(yùn)行)

這篇具有很好參考價(jià)值的文章主要介紹了python 使用socket制作聊天室-(附帶 源碼 可以直接運(yùn)行)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

python 使用socket制作聊天室

1.基本前提

為什么socket能做聊天室呢

  1. socket提供了通信的服務(wù) 比如你可以創(chuàng)建tcp udp的請(qǐng)求 向某個(gè)主機(jī)發(fā)起通信
    就像是你想和某人說話 你得會(huì)發(fā)音
  2. 就是提供了服務(wù)端的方式和客戶端的方式
    服務(wù)端處理用戶發(fā)起的請(qǐng)求
    客戶端發(fā)送數(shù)據(jù)和接收服務(wù)端的響應(yīng)數(shù)據(jù)
    就像你打開瀏覽器看視頻 你作為客戶端 發(fā)起請(qǐng)求 在某處的服務(wù)端(web服務(wù)器)會(huì)把請(qǐng)求接受處理
    返回相應(yīng)的數(shù)據(jù) 通過瀏覽器(客戶端)接受解析 就變成了看的見的網(wǎng)頁(yè)數(shù)據(jù)

想搞定聊天室
1.需要一個(gè)服務(wù)端提供下服務(wù)

  1. 時(shí)刻接受鏈接進(jìn)來的用戶
  2. 接受用戶的發(fā)送信息
  3. 對(duì)所有的用戶發(fā)送廣播 這樣都能收到

2.需要多個(gè)客戶端

1.鏈接進(jìn)入聊天室
2.發(fā)送數(shù)據(jù)
3.接受廣播數(shù)據(jù)

基本關(guān)系
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp

2.服務(wù)端的搭建

1.導(dǎo)入socket包 創(chuàng)建通訊tcp等請(qǐng)求
導(dǎo)入threading包 使用線程來處理那些請(qǐng)求數(shù)據(jù)

import socket
import threading
#全局變量
SERVER_HOST = 'localhost'
SERVER_PORT = 8000
BUFFER_SIZE = 1024

2.創(chuàng)建socket的實(shí)例tcp通信對(duì)象
socket.AF_INET, socket.SOCK_STREAM 是創(chuàng)建tcp的參數(shù)
百度可以了解更多 比如udp等

 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3.綁定端口 服務(wù)的套接字 也就是IP地址+端口號(hào)

 server_socket.bind((SERVER_HOST, SERVER_PORT))
 server_socket.listen(5) # 監(jiān)聽 最大可以鏈接的數(shù)量

4.進(jìn)入循環(huán)中 等待客戶端的鏈接

    while True:
        client_socket, addr = server_socket.accept()

5.把鏈接的客戶存放起來

# 存放鏈接進(jìn)來聊天的用戶
clients = []

    while True:
        client_socket, addr = server_socket.accept()
        clients.append(client_socket)

使用線程 給進(jìn)入的用戶分配處理函數(shù)

# 開啟線程
handle_client處理函數(shù)
client_socket 參數(shù)
thread = threading.Thread(target=handle_client, args=(client_socket,))
thread.start()

handle_client的定義
1.客戶端第一次進(jìn)來 需要輸入自己的名稱

def handle_client(client_socket):
    """處理客戶端連接"""
    name = client_socket.recv(BUFFER_SIZE).decode()#接受客戶端發(fā)來的名稱
    print(f'[*] {name} 已連接')#服務(wù)端打印查看
    welcome = f'歡迎來到聊天室, {name}!\n'.encode()
    client_socket.send(welcome)#返回給客戶端 歡迎的信息

2.循環(huán) 等待用戶的連天數(shù)據(jù)發(fā)送

    while True:
        msg = client_socket.recv(BUFFER_SIZE)#接受用戶發(fā)來的消息 比如 你好
        #處理用戶的退出
        if msg.decode() == 'quit':
            print(f'[*] {name} 斷開連接')
            client_socket.close()
            break
        #向聊天室的所有人廣播
        broadcast(msg, name)

broadcast定義
clients 所有的鏈接客戶
發(fā)送誰說了什么
send(f’{name}: {msg.decode()}'.encode())
encode 是轉(zhuǎn)碼的意思
decode 是解碼的意思

def broadcast(msg, name):
    """向所有已連接的客戶端廣播消息"""
    for client in clients:
        client.send(f'{name}: {msg.decode()}'.encode())

服務(wù)端總結(jié):

  1. 創(chuàng)建一個(gè)tcp的服務(wù)端
  2. 把鏈接的用戶存放起來
  3. 第一次接受用戶名字
  4. while循環(huán)接受發(fā)送的信息并廣播出去

3. 客戶端的搭建

引入socket包
引入threading包

import socket
import threading
#全局變量
SERVER_HOST = 'localhost'
SERVER_PORT = 8000
BUFFER_SIZE = 1024

創(chuàng)建一個(gè)tcp通信

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

發(fā)起連接

 client_socket.connect((SERVER_HOST, SERVER_PORT))

發(fā)送自己的昵稱

name = input('請(qǐng)輸入您的昵稱: ')
  # 發(fā)送昵稱
name_bytes = name.encode()
client_socket.send(name_bytes)

開啟線程進(jìn)行聊天的處理

# 開啟線程用來接收服務(wù)器發(fā)送的消息
    thread_output = threading.Thread(target=handle_output, args=(client_socket,))
    thread_output.start()

    # 開啟線程用來處理用戶輸入的消息
    thread_input = threading.Thread(target=handle_input, args=(client_socket,))
    thread_input.start()

handle_input的定義
輸入要發(fā)送的信息

def handle_input(client_socket):
    """處理用戶輸入"""
    while True:
        msg = input('')#輸入要發(fā)送的信息
        client_socket.send(msg.encode())
        if msg == 'quit':#退出處理
            break

handle_output的定義
接受廣播的數(shù)據(jù)展示出來

def handle_output(client_socket):
    """處理消息輸出"""
    while True:
        msg = client_socket.recv(BUFFER_SIZE)#接收數(shù)據(jù)
        if msg.decode() == 'quit':
            break
        print(msg.decode())#展示

客戶端總結(jié)

  1. 發(fā)起連接
  2. 進(jìn)行昵稱發(fā)送
  3. 發(fā)送信息
  4. 接受廣播信息

4 完整的源碼分享

服務(wù)端

import socket
import threading

SERVER_HOST = '0.0.0.0'
SERVER_PORT = 8000
BUFFER_SIZE = 1024

def handle_client(client_socket):
    """處理客戶端連接"""
    name = client_socket.recv(BUFFER_SIZE).decode()
    print(f'[*] {name} 已連接')
    welcome = f'歡迎來到聊天室, {name}!\n'.encode()
    client_socket.send(welcome)

    while True:
        msg = client_socket.recv(BUFFER_SIZE)
        if msg.decode() == 'quit':
            print(f'[*] {name} 斷開連接')
            client_socket.close()
            break
        broadcast(msg, name)

def broadcast(msg, name):
    """向所有已連接的客戶端廣播消息"""
    for client in clients:
        client.send(f'{name}: {msg.decode()}'.encode())

if __name__ == '__main__':
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((SERVER_HOST, SERVER_PORT))
    server_socket.listen(5)
    print(f'[*] 正在聽取端口 {SERVER_PORT}')

    clients = []

    while True:
        client_socket, addr = server_socket.accept()
        clients.append(client_socket)

        # 開啟線程
        thread = threading.Thread(target=handle_client, args=(client_socket,))
        thread.start()

客戶端的代碼

import socket
import threading

SERVER_HOST = 'localhost'
SERVER_PORT = 8000
BUFFER_SIZE = 1024

def handle_input(client_socket):
    """處理用戶輸入"""
    while True:
        msg = input('')
        client_socket.send(msg.encode())
        if msg == 'quit':
            break

def handle_output(client_socket):
    """處理消息輸出"""
    while True:
        msg = client_socket.recv(BUFFER_SIZE)
        if msg.decode() == 'quit':
            break
        print(msg.decode())

if __name__ == '__main__':
    name = input('請(qǐng)輸入您的昵稱: ')
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((SERVER_HOST, SERVER_PORT))

    # 發(fā)送昵稱
    name_bytes = name.encode()
    client_socket.send(name_bytes)

    # 開啟線程用來接收服務(wù)器發(fā)送的消息
    thread_output = threading.Thread(target=handle_output, args=(client_socket,))
    thread_output.start()

    # 開啟線程用來處理用戶輸入的消息
    thread_input = threading.Thread(target=handle_input, args=(client_socket,))
    thread_input.start()

5.實(shí)驗(yàn)測(cè)試

開啟服務(wù)
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp
客戶鏈接
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp
服務(wù)檢測(cè)
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp
在連接一個(gè)用戶
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp
服務(wù)檢測(cè)
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp
發(fā)送消息
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp
廣播接受
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp
這樣就能聊天了
python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp

python實(shí)現(xiàn)簡(jiǎn)易聊天室,pythonSet,python,網(wǎng)絡(luò),udp
代碼還有很多地方可以改進(jìn)
可以直接復(fù)制粘貼使用文章來源地址http://www.zghlxwxcb.cn/news/detail-720454.html

到了這里,關(guān)于python 使用socket制作聊天室-(附帶 源碼 可以直接運(yùn)行)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [Socket]Python用UDP協(xié)議建立帶有私聊功能的網(wǎng)絡(luò)聊天室-建立聊天工具

    [Socket]Python用UDP協(xié)議建立帶有私聊功能的網(wǎng)絡(luò)聊天室-建立聊天工具

    前些天實(shí)習(xí)面試的時(shí)候被面試官問到Socket編程的問題,即“Socket創(chuàng)建和釋放的具體過程是什么”,當(dāng)時(shí)答不上來,似乎是涉及到發(fā)送和接收緩沖區(qū)的問題。由于自己在Socket編程這一塊知識(shí)較為薄弱,于是寫下這篇文章,當(dāng)作復(fù)習(xí)下Socket編程知識(shí)。 首先,該實(shí)驗(yàn)是我在大三上學(xué)

    2024年02月03日
    瀏覽(20)
  • 使用 Node.js 和 Socket.io 構(gòu)建可創(chuàng)建、可加入房間的實(shí)時(shí)聊天室

    通過可以加入房間的聊天室應(yīng)用程序,首先可以回顧 Socket.io 的基本使用方法和流程,并在此基礎(chǔ)上我們學(xué)習(xí) join 、 to 兩個(gè) API 方法,從而實(shí)現(xiàn)簡(jiǎn)易的可加入房間的聊天系統(tǒng)。 Socket.io 、 express 和 ejs 。 在實(shí)現(xiàn)應(yīng)用程序之前,我們先梳理一下我們需要的功能和流程。 所需功能

    2024年02月16日
    瀏覽(22)
  • Linux socket聊天室

    Linux socket聊天室

    目錄 一、運(yùn)行效果 1、分別編譯客戶端和服務(wù)端代碼 2、運(yùn)行 3、使用效果 ?二、代碼 chat.h 服務(wù)端代碼? 客戶端代碼 gcc client.c -o C -lpthread gcc server.c -o S -lpthread 先運(yùn)行服務(wù)器端,8888為端口號(hào) ./S 8888 ?再運(yùn)行客戶端,這里創(chuàng)建兩個(gè)客戶端,端口號(hào)要和服務(wù)端的一樣 ./C 127.0.0.1

    2024年01月22日
    瀏覽(19)
  • 【一】【socket聊天室】-多線程,socket編程

    【一】【socket聊天室】-多線程,socket編程

    本文主要實(shí)現(xiàn)基于socket編程的聊天室,主要分為下面三個(gè)步驟: (1)多用戶聊天:一個(gè)服務(wù)器多個(gè)客戶端,客戶端信息顯示在公共的服務(wù)端窗口,利用 多線程 實(shí)現(xiàn); ? ? ? ? ?——客戶端雙線程:一個(gè)接受線程一個(gè)發(fā)送線程(主線程); ? ? ? ? ?——服務(wù)器單線程:接收

    2024年02月08日
    瀏覽(18)
  • 【Java socket編程】多人聊天室

    【Java socket編程】多人聊天室

    課程設(shè)計(jì)大作業(yè) 功能: 1.具有 點(diǎn)對(duì)點(diǎn)通信 功能,任意客戶端之間能夠發(fā)送消息。 2.具有 群組通信 功能: 客戶端可以 自主建立群組 ,添加或刪除組成員; 客戶端能夠向組內(nèi)成員同時(shí)發(fā)送消息,其他組成員不能收到。 3.具有 廣播 功能 客戶端能夠向所有其他成員 廣播消息

    2024年02月04日
    瀏覽(35)
  • C語(yǔ)言Socket編程TCP簡(jiǎn)單聊天室

    C語(yǔ)言Socket編程TCP簡(jiǎn)單聊天室

    這是一個(gè)使用C語(yǔ)言進(jìn)行套接字編程實(shí)現(xiàn)的簡(jiǎn)單聊天室, 使用Pthread庫(kù)進(jìn)行多線程執(zhí)行 服務(wù)端: svr.c 客戶端: cli.c Makefile: Makefile 執(zhí)行編譯 啟動(dòng)服務(wù)器 啟動(dòng)客戶端 聊天 退出

    2024年02月03日
    瀏覽(26)
  • 【socket.js聯(lián)合express】:搭建簡(jiǎn)約版聊天室

    【socket.js聯(lián)合express】:搭建簡(jiǎn)約版聊天室

    本次項(xiàng)目利用express與socket.js 實(shí)現(xiàn)簡(jiǎn)約版聊天室,有用戶登錄及提示 用戶退出及提示。聊天的顯示 聊天室 該頁(yè)面主要有四大塊區(qū)域 頭部用戶輸入登錄與退出功能 左側(cè)用戶聊天顯示區(qū)域 右側(cè)用戶列表顯示區(qū)域 底部用戶輸入聊天內(nèi)容區(qū)域 2.1功能描述 當(dāng)用戶在頭部的輸入框輸

    2024年02月07日
    瀏覽(15)
  • Linux-Socket實(shí)現(xiàn)模擬群聊(多人聊天室)

    Linux-Socket實(shí)現(xiàn)模擬群聊(多人聊天室)

    簡(jiǎn)單版本 服務(wù)端源碼 客戶端源碼 服務(wù)器可以在特定的端口監(jiān)聽客戶端的連接請(qǐng)求,若連接成功,服務(wù)器采用廣播的形式向當(dāng)前所有連接客戶端發(fā)送該客戶端登錄成功消息多個(gè)客戶端可以同時(shí)登錄,在源碼文件中可以配置最多群聊同時(shí)在線人數(shù)。服務(wù)端接收到客戶端發(fā)送的群

    2024年02月10日
    瀏覽(21)
  • .NET編程——利用C#實(shí)現(xiàn)基于Socket類的聊天室(WinForm)

    .NET編程——利用C#實(shí)現(xiàn)基于Socket類的聊天室(WinForm)

    在學(xué)習(xí)C#和MySQL實(shí)現(xiàn)注冊(cè)登錄和TCP協(xié)議的Socket通信后,本文將介紹如何利用Socket類中的異步通信函數(shù)來實(shí)現(xiàn)本地聊天室功能, Socket通信限制了客戶端與客戶端之間的通信,客戶端只能接收來自服務(wù)器的消息而不能接收到客戶端發(fā)送的消息,因此服務(wù)器最佳的選擇是起到一個(gè)中

    2023年04月21日
    瀏覽(33)
  • 【你的第一個(gè)socket應(yīng)用】Vue3+Node實(shí)現(xiàn)一個(gè)WebSocket即時(shí)通訊聊天室

    【你的第一個(gè)socket應(yīng)用】Vue3+Node實(shí)現(xiàn)一個(gè)WebSocket即時(shí)通訊聊天室

    這篇文章主要是用WebSocket技術(shù)實(shí)現(xiàn)一個(gè) 即時(shí)通訊聊天室 ,首先先要了解為什么使用WebSocket而不是普通的HTTP協(xié)議,如果使用HTTP協(xié)議它是下面這種情況: 我發(fā)送一條消息,發(fā)送一個(gè)發(fā)送消息的請(qǐng)求;* 一直輪詢接收別人發(fā)送的消息,不管有沒有發(fā)送都要定時(shí)去調(diào)用接口。這里明

    2023年04月20日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包