亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用python socket實現聊天室

發布時間:2022-03-29 16:29:28 來源:億速云 閱讀:191 作者:iii 欄目:移動開發

本文小編為大家詳細介紹“怎么用python socket實現聊天室”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么用python socket實現聊天室”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

server端

import socket
import json,struct
from concurrent.futures import ThreadPoolExecutor
debug = True

s = socket.socket()
s.bind(("127.0.0.1",8848))
s.listen()
clients = {}

pool = ThreadPoolExecutor(100)

def send_msg(soc, msg):
    l = len(msg.encode("utf-8"))
    soc.send(struct.pack("q",l))

    # 發數據
    soc.send(msg.encode("utf-8"))

"""用于監聽已經建立連接的客戶端發來的消息"""
def task(ip,c):
    while True:
        l = c.recv(8)
        ls = struct.unpack("q",l)[0]
        data = json.loads(c.recv(ls).decode("utf-8"))   #接收到來自客戶端的消息。 eg:    data = {"to_addr":"msg":""}
        print("來自%s的消息:%s"%(ip,data["msg"]))
        # 客戶端發過來的數據
        # 數據有兩種情況 一種是發給所有人的 另一種單獨發給某一個人的
        if data.get("to_addr"): #傳過來一個json格式的字典,如果這個to_addr不是空的話,就私發給目標客戶
            target_ip = data["to_addr"]        #從data字典里中獲取目標ip
            target_conn = clients.get(target_ip)   #獲取目標客戶的conn鏈接
            send_msg(target_conn,data["msg"])    #發送訊息
        else:
            for ip,conn in clients.items():
                # if c != target_conn:
                send_msg(conn,data["msg"])#data["msg"]


        #     # 從所有客戶端列表中找到這一個  發給它
        #     to_addr = data["to_addr"]
        #     # print(data["to_addr"],"_______________")
        #     soc = clients.get(to_addr)
        #     send_msg(soc,data["msg"])
        # else:
        #     # 遍歷所有客戶端 發給每一個人
        #     for k,soc in clients.items():
        #         # if soc != c:
        #             send_msg(soc,data["msg"])

while True:
    """以下代碼用于檢測是否有客戶端連接"""
    c,add = s.accept()
    print("%s" % add[0],"連接到服務器!")
    clients[add[0]] = c  # 把ip地址作為key,conn作為value存入clients字典中 ,clients = {"192.188.3.4":conn鏈接}
    if debug:
        print("clients=%s"%clients)

    """以下代碼用于監聽已經建立連接的客戶端發來的消息"""
    pool.submit(task,add,c)

client端

import socket,json,struct
from threading import Thread

c = socket.socket()
c.connect(("127.0.0.1",8848))
print("連接服務器成功!")
def recver():
    while True:
        lens_bytes = c.recv(8)
        lens = struct.unpack("q", lens_bytes)[0]
        recv_msg = c.recv(lens).decode("utf-8")
        print(recv_msg)

# 開啟線程處理接收數據
Thread(target=recver).start()


while True:
    msg = input(">>>>:").strip() # 阻塞
    if "@" in msg:
        info = {"msg":msg.split("@")[0],"to_addr":msg.split("@")[1]}
    else:
        info = {"msg": msg}

    data = json.dumps(info).encode("utf-8")
    c.send(struct.pack("q",len(data)))
    c.send(data)

讀到這里,這篇“怎么用python socket實現聊天室”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳谷县| 东明县| 灵丘县| 楚雄市| 筠连县| 丹凤县| 澎湖县| 元朗区| 靖远县| 错那县| 台中市| 安阳县| 南阳市| 武隆县| 南和县| 浠水县| 会东县| 华坪县| 涞水县| 德阳市| 会泽县| 若羌县| 饶河县| 九江市| 博罗县| 长沙县| 绥化市| 阳原县| 航空| 西城区| 甘德县| 彰化市| 苗栗市| 龙川县| 郧西县| 兴化市| 观塘区| 清远市| 和田市| 海伦市| 来安县|