Python3:利用Socket實現多使用者實時聊天.
阿新 • • 發佈:2018-11-12
我們繼續在用程式碼演示Socket和Server 實現通訊 這個章節繼續擴充套件
首先我們要做到的是 實時通訊,
這裡面牽扯了3個知識點:
- 既然是實時通訊,必須是用input線上輸入
- 我們要把close 語句刪除,否則會自己斷掉
- 為了達到實時通訊,必須不斷的迴圈 用while 語句就行.
現在我們來實現吧
這個是客戶端的程式碼
import socket client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect(("127.0.0.1",8000)) while True: #呼叫了while迴圈並且是True代表永遠不會斷開 a=input() #呼叫了input 語句 client.send(a.encode("utf-8")) # 客戶端socket 傳送資料給服務端 data = client.recv(1024) # 接受的資料 print(data.decode("utf8"))
服務端的程式碼:
import socket server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind(("0.0.0.0",8000)) server.listen() sock,addr=server.accept() while True: #呼叫了while迴圈並且是True代表永遠不會斷開 data = sock.recv(1024) print(data.decode("utf-8")) a=input("") #呼叫了input 語句 sock.send(a.encode("utf8"))
實時通訊我們已經完成,
下邊就是 如何達到多客戶端的通訊,這裡用到了多執行緒的知識
多執行緒看下就好,我不做解釋,後邊的章節我會詳細的介紹 .
服務端程式碼如下 :
import socket import threading server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind(("0.0.0.0",8000)) server.listen() def handle_sock(sock,addr): #sock 的流程 while True: data = sock.recv(1024) b=data.decode("utf-8") print(data.decode("utf-8")) a = input("") sock.send(a.encode("utf8")) while True: sock, addr = server.accept() #接受不同client 端的sock . client_thread=threading.Thread(target=handle_sock,args=(sock,addr)) #把sock 加入執行緒內 client_thread.start() #啟動執行緒
我們可以試試下,我們可以啟動兩個client.
我試過了是可以行的通的,大家可以試試 ,不明白的地方在下邊給我留言 ,謝謝
我都寫好了剛才有小夥伴問我如何退出client呢 ?我在這補充下
在這裡我把程式碼附上去,都是很簡單,自己可以理解下:
import socket
import threading
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("0.0.0.0",8000))
server.listen()
def handle_sock(sock,addr):
while True:
data = sock.recv(1024)
b=data.decode("utf-8")
print(data.decode("utf-8"))
if b=="exit":
break
a = input("")
sock.send(a.encode("utf8"))
sock.close()
while True:
sock, addr = server.accept()
client_thread=threading.Thread(target=handle_sock,args=(sock,addr))
client_thread.start()