日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python系列:摸魚小利器,使用Python創建一個聊天室

來源: 責編: 時間:2024-01-18 17:35:43 223觀看
導讀上班是幫老板賺錢,摸魚才是賺老板的錢。日常摸魚跟小伙伴聊天是我們經常干的事兒,但是對于有些位置不好的同學,背對領導或者坐在過道中的,就需要時刻盯防經過的人,以防自己上班聊天劃水摸魚被抓現行,那么今天就來介紹如何使

上班是幫老板賺錢,摸魚才是賺老板的錢。gGe28資訊網——每日最新資訊28at.com

日常摸魚跟小伙伴聊天是我們經常干的事兒,但是對于有些位置不好的同學,背對領導或者坐在過道中的,就需要時刻盯防經過的人,以防自己上班聊天劃水摸魚被抓現行,那么今天就來介紹如何使用Python創建一個聊天室。gGe28資訊網——每日最新資訊28at.com

gGe28資訊網——每日最新資訊28at.com

socket介紹

在網絡編程中,Socket 是一種通信機制,允許計算機在網絡上相互通信。Python 中的 socket 庫提供了一種簡單而強大的方式來創建網絡應用程序,本文將介紹socket庫的基本概念、創建和使用套接字(Socket)的方法以及一些常見的網絡編程用例。gGe28資訊網——每日最新資訊28at.com

基本概念

Socket 是一種通信的端點,可以通過網絡發送和接收數據。在網絡編程中,通常使用兩種類型的Socket:服務器端套接字和客戶端套接字。服務器端套接字等待來自客戶端的連接請求,而客戶端套接字嘗試與服務器端建立連接。gGe28資訊網——每日最新資訊28at.com

創建服務器

import socket# 創建服務器端套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 綁定地址和端口server_address = ('localhost', 8888)server_socket.bind(server_address)# 監聽連接請求server_socket.listen(5)print('Waiting for client to connect...')# 接受客戶端連接client_socket, client_address = server_socket.accept()print('Connection from:', client_address)# 接收數據data = client_socket.recv(1024)print('Received:', data.decode())# 發送數據message = 'Hello, client!'client_socket.send(message.encode())# 關閉連接client_socket.close()server_socket.close()

通過上面的代碼我們成功出創建了一個聊天室的服務器,其中的ip可以替換成你自己電腦的ip地址,這樣比人就可以通過IP:Port來鏈接你的電腦。gGe28資訊網——每日最新資訊28at.com

gGe28資訊網——每日最新資訊28at.com

運行后我們可以看到服務器目前正在等待連接中,接下來我們就創建客戶端來鏈接服務器。gGe28資訊網——每日最新資訊28at.com

創建客戶端

import socket# 創建客戶端套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 連接到服務器server_address = ('localhost', 8888)client_socket.connect(server_address)# 發送數據message = 'Hello, server!'client_socket.send(message.encode())# 接收數據data = client_socket.recv(1024)print('Received:', data.decode())# 關閉連接client_socket.close()

通過上面的代碼我們已經成功創建好了客戶端,鏈接服務器地址哪里修改成服務器的對應IP和端口就行了,接下來我們就來鏈接服務器。gGe28資訊網——每日最新資訊28at.com

gGe28資訊網——每日最新資訊28at.com

gGe28資訊網——每日最新資訊28at.com

可以看到運行客戶端后我們可以看到服務端和客戶端都有反應,服務端收到客戶端的連接后發送了一天消息,客戶端同時也收到了服務端發來的消息,這兩條消息是我們指定的,并且發送一條后聊天室就關閉,接下來我們來優化一下gGe28資訊網——每日最新資訊28at.com

保持聊天室長連接

這里我們使用多線程來創建一個持久性連接的聊天室。gGe28資訊網——每日最新資訊28at.com

服務器:gGe28資訊網——每日最新資訊28at.com

import socketimport threadingdef handle_client(client_socket):    while True:        # 接收客戶端消息        data = client_socket.recv(1024)        if not data:            break  # 如果客戶端斷開連接,退出循環        message = data.decode()        print(f"Received from {client_socket.getpeername()}: {message}")        # 廣播消息給所有客戶端        broadcast(message, client_socket)    # 關閉連接    print(f"Connection from {client_socket.getpeername()} closed.")    clients.remove(client_socket)    client_socket.close()def broadcast(message, sender_socket):    for client in clients:        if client != sender_socket:            try:                client.send(message.encode())            except:                # 如果發送失敗,說明客戶端已斷開連接,移除該客戶端                clients.remove(client)# 創建服務器端套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 綁定地址和端口server_address = ('localhost', 8888)server_socket.bind(server_address)# 監聽連接請求server_socket.listen(5)print('Waiting for clients to connect...')# 存儲所有客戶端套接字的列表clients = []while True:    # 接受客戶端連接    client_socket, client_address = server_socket.accept()    print(f"Connection from {client_address} established.")    # 存儲客戶端套接字到列表    clients.append(client_socket)    # 創建一個線程來處理客戶端    client_handler = threading.Thread(target=handle_client, args=(client_socket,))    client_handler.start()

客戶端:gGe28資訊網——每日最新資訊28at.com

import socketimport threadingdef receive_messages():    while True:        try:            # 接收服務器端消息            data = client_socket.recv(1024)            if not data:                break  # 如果服務器端斷開連接,退出循環            message = data.decode()            print("Received:", message)        except:            break# 創建客戶端套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 連接到服務器server_address = ('localhost', 8888)client_socket.connect(server_address)# 創建一個線程來接收服務器端消息receive_thread = threading.Thread(target=receive_messages)receive_thread.start()# 發送消息到服務器while True:    message = input("我是客戶端1: ")    client_socket.send(message.encode())

這里注意,服務器和客戶端是存在不同的py文件中的,就是說如果幾個人中需要一個人創建服務區和聊天室的話就需要創建兩個py文件。gGe28資訊網——每日最新資訊28at.com

然后其他小伙伴就只需要創建一個聊天室就行了,在客戶端中的message標明你是誰就行,接下來我們開始實驗。gGe28資訊網——每日最新資訊28at.com

gGe28資訊網——每日最新資訊28at.com

gGe28資訊網——每日最新資訊28at.com

gGe28資訊網——每日最新資訊28at.com

這里可以看到我們成功搭建了一個微型聊天室,每個客戶端都能收到其他客戶發送的消息,而服務端可以看到所有客戶端所發送的消息。gGe28資訊網——每日最新資訊28at.com

以上就是使用Python中的socket庫搭建一個微型的聊天室,在里面不僅可以進行實時聊天,還可以傳送文件、遠程命令執行或者聯網小游戲。gGe28資訊網——每日最新資訊28at.com

當然我給出的示例只是一個簡單的多線程聊天室的示例,只是用于娛樂,如果想要在項目中實際應用則需要考慮到更多的安全性和錯誤的處理,如果需要更高級的異步處理,還會用到asyncio。gGe28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-64503-0.htmlPython系列:摸魚小利器,使用Python創建一個聊天室

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 生成式 AI 帶給軟件開發的三個幻覺:速度快、質量高、人更少

下一篇: C++中的引用詳解

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 柘城县| 桂阳县| 苍溪县| 青河县| 中卫市| 弥渡县| 木兰县| 宣城市| 黄冈市| 崇左市| 老河口市| 宜兰县| 昌都县| 湄潭县| 如皋市| 红桥区| 高阳县| 拉孜县| 高淳县| 金湖县| 德州市| 巢湖市| 开远市| 繁昌县| 长顺县| 固安县| 营口市| 南漳县| 兴业县| 盐亭县| 阿拉尔市| 天峨县| 池州市| 尚志市| 罗源县| 景泰县| 东光县| 丁青县| 铁岭县| 交城县| 万山特区|