新聞中心
上班是幫老板賺錢,摸魚才是賺老板的錢。

站在用戶的角度思考問題,與客戶深入溝通,找到西區(qū)網(wǎng)站設計與西區(qū)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設計、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋西區(qū)地區(qū)。
日常摸魚跟小伙伴聊天是我們經(jīng)常干的事兒,但是對于有些位置不好的同學,背對領導或者坐在過道中的,就需要時刻盯防經(jīng)過的人,以防自己上班聊天劃水摸魚被抓現(xiàn)行,那么今天就來介紹如何使用Python創(chuàng)建一個聊天室。
socket介紹
在網(wǎng)絡編程中,Socket 是一種通信機制,允許計算機在網(wǎng)絡上相互通信。Python 中的 socket 庫提供了一種簡單而強大的方式來創(chuàng)建網(wǎng)絡應用程序,本文將介紹socket庫的基本概念、創(chuàng)建和使用套接字(Socket)的方法以及一些常見的網(wǎng)絡編程用例。
基本概念
Socket 是一種通信的端點,可以通過網(wǎng)絡發(fā)送和接收數(shù)據(jù)。在網(wǎng)絡編程中,通常使用兩種類型的Socket:服務器端套接字和客戶端套接字。服務器端套接字等待來自客戶端的連接請求,而客戶端套接字嘗試與服務器端建立連接。
創(chuàng)建服務器
import socket
# 創(chuàng)建服務器端套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 綁定地址和端口
server_address = ('localhost', 8888)
server_socket.bind(server_address)
# 監(jiān)聽連接請求
server_socket.listen(5)
print('Waiting for client to connect...')
# 接受客戶端連接
client_socket, client_address = server_socket.accept()
print('Connection from:', client_address)
# 接收數(shù)據(jù)
data = client_socket.recv(1024)
print('Received:', data.decode())
# 發(fā)送數(shù)據(jù)
message = 'Hello, client!'
client_socket.send(message.encode())
# 關閉連接
client_socket.close()
server_socket.close()通過上面的代碼我們成功出創(chuàng)建了一個聊天室的服務器,其中的ip可以替換成你自己電腦的ip地址,這樣比人就可以通過IP:Port來鏈接你的電腦。
運行后我們可以看到服務器目前正在等待連接中,接下來我們就創(chuàng)建客戶端來鏈接服務器。
創(chuàng)建客戶端
import socket
# 創(chuàng)建客戶端套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 連接到服務器
server_address = ('localhost', 8888)
client_socket.connect(server_address)
# 發(fā)送數(shù)據(jù)
message = 'Hello, server!'
client_socket.send(message.encode())
# 接收數(shù)據(jù)
data = client_socket.recv(1024)
print('Received:', data.decode())
# 關閉連接
client_socket.close()通過上面的代碼我們已經(jīng)成功創(chuàng)建好了客戶端,鏈接服務器地址哪里修改成服務器的對應IP和端口就行了,接下來我們就來鏈接服務器。
可以看到運行客戶端后我們可以看到服務端和客戶端都有反應,服務端收到客戶端的連接后發(fā)送了一天消息,客戶端同時也收到了服務端發(fā)來的消息,這兩條消息是我們指定的,并且發(fā)送一條后聊天室就關閉,接下來我們來優(yōu)化一下
保持聊天室長連接
這里我們使用多線程來創(chuàng)建一個持久性連接的聊天室。
服務器:
import socket
import threading
def handle_client(client_socket):
while True:
# 接收客戶端消息
data = client_socket.recv(1024)
if not data:
break # 如果客戶端斷開連接,退出循環(huán)
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:
# 如果發(fā)送失敗,說明客戶端已斷開連接,移除該客戶端
clients.remove(client)
# 創(chuàng)建服務器端套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 綁定地址和端口
server_address = ('localhost', 8888)
server_socket.bind(server_address)
# 監(jiān)聽連接請求
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)
# 創(chuàng)建一個線程來處理客戶端
client_handler = threading.Thread(target=handle_client, args=(client_socket,))
client_handler.start()客戶端:
import socket
import threading
def receive_messages():
while True:
try:
# 接收服務器端消息
data = client_socket.recv(1024)
if not data:
break # 如果服務器端斷開連接,退出循環(huán)
message = data.decode()
print("Received:", message)
except:
break
# 創(chuàng)建客戶端套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 連接到服務器
server_address = ('localhost', 8888)
client_socket.connect(server_address)
# 創(chuàng)建一個線程來接收服務器端消息
receive_thread = threading.Thread(target=receive_messages)
receive_thread.start()
# 發(fā)送消息到服務器
while True:
message = input("我是客戶端1: ")
client_socket.send(message.encode())這里注意,服務器和客戶端是存在不同的py文件中的,就是說如果幾個人中需要一個人創(chuàng)建服務區(qū)和聊天室的話就需要創(chuàng)建兩個py文件。
然后其他小伙伴就只需要創(chuàng)建一個聊天室就行了,在客戶端中的message標明你是誰就行,接下來我們開始實驗。
這里可以看到我們成功搭建了一個微型聊天室,每個客戶端都能收到其他客戶發(fā)送的消息,而服務端可以看到所有客戶端所發(fā)送的消息。
以上就是使用Python中的socket庫搭建一個微型的聊天室,在里面不僅可以進行實時聊天,還可以傳送文件、遠程命令執(zhí)行或者聯(lián)網(wǎng)小游戲。
當然我給出的示例只是一個簡單的多線程聊天室的示例,只是用于娛樂,如果想要在項目中實際應用則需要考慮到更多的安全性和錯誤的處理,如果需要更高級的異步處理,還會用到asyncio。
網(wǎng)站名稱:Python系列:摸魚小利器,使用Python創(chuàng)建一個聊天室
文章位置:http://www.5511xx.com/article/cohhjce.html


咨詢
建站咨詢
