91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

基于python3的socket聊天編程

發布時間:2020-09-30 23:47:28 來源:腳本之家 閱讀:212 作者:Dyy8686 欄目:開發技術

本文實例為大家分享了基于python3的socket聊天編程,供大家參考,具體內容如下

階段一:最簡易的聊天系統

缺點:程序不夠完善,只能一來一回,且沒人每次只能說一句話

server端:

import socket
HostPort = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(HostPort)
s.listen(1)
conn,addr = s.accept()
#print('Connecting by : %s ' % addr)
while 1:
 data = conn.recv(1024).decode()
 print (data)
 user_input = input('>>>')
 conn.send(user_input.encode('utf8'))
 #conn.close()
s.close()

client端:

import socket
hostport = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(hostport)
 
while 1:
 user_input = input('>>> ').strip()
 s.send(user_input.encode('utf-8'))
 if len(user_input) == 0:
 continue
 if user_input == 'quit':
 s.close()
 break
 server_reply = s.recv(1024).decode()
 print (server_reply)

注意事項:在python 3中,bytes和str是兩個不同的概念,send和recv的數據都是bytes,而str轉化成bytes是通過encode('utf8')實現,bytes轉化成str,是通過decode()實現;

在該階段,服務十分不穩定,經常會斷開,所以有下一個階段,且每人每次可以發送多條消息;

階段二  多線程并發聊天系統

在階段一中,服務器端和客戶的通信只能一發一收,不能實現服務器端和客戶端雙方的自由消息發送,所以,我們引用多線程,我們將消息的接收單獨開一個線程,這樣便可以服務器端和客戶端實現同時發送多條消息,并不影響接收;

開始上代碼:

server端:

import socket
import threading # 導入多線程模塊
print("Waitting to be connected......")
HostPort = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 創建socket實例
s.bind(HostPort)
s.listen(1)
conn,addr = s.accept()
true=True
addr = str(addr)
print('Connecting by : %s ' %addr )
def Receve(conn):   # 將接收定義成一個函數
 global true # 聲明全局變量,當接收到的消息為quit時,則觸發全局變量 true = False,則會將socket關閉
 while true:
 data = conn.recv(1024).decode('utf8') 
 if data == 'quit':
 true=False
 print("you have receve: "+data+" from"+addr) # 當接收的值為'quit'時,退出接收線程,否則,循環接收并打印
thrd=threading.Thread(target=Receve,args=(conn,)) # 線程實例化,target為方法,args為方法的參數 
thrd.start()    # 啟動線程
while true:
 user_input = input('>>>')
 conn.send(user_input.encode('utf8'))  # 循環發送消息
 if user_input == 'quit':   # 當發送為‘quit'時,關閉socket
 true = False
 #conn.close()
s.close()

client 端

import socket
import threading
hostport = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(hostport)
true = True
def Receve(s):
 global true
 while true:
 data = s.recv(1024).decode('utf8')
 if data == 'quit':
 true = False
 print('recevie news:\033[5;37;46m%s\033[0m' % data )
thrd=threading.Thread(target=Receve,args=(s,))
thrd.start()
while true:
 user_input = input('>>>')
 s.send(user_input.encode('utf8'))
 if user_input == 'quit':
 true = False
s.close()

效果展示(紫色字體為接收消息,白色字體為發送消息,雙方任意一方輸入'quit',即可退出)

1、服務器端:(原來只能服務器端先接收消息后才能發送消息,現在沒有這種限制,可以隨時主動發送)

基于python3的socket聊天編程

2、客戶端     

基于python3的socket聊天編程

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

朔州市| 米脂县| 孝义市| 昭觉县| 北辰区| 伊金霍洛旗| 牡丹江市| 高平市| 贵南县| 丹巴县| 云阳县| 开江县| 彭泽县| 白城市| 阿荣旗| 阳东县| 青铜峡市| 永顺县| 锡林郭勒盟| 汝城县| 镇康县| 永定县| 水富县| 澎湖县| 浑源县| 米易县| 隆子县| 卢龙县| 承德市| 浦江县| 弋阳县| 始兴县| 嘉禾县| 浠水县| 唐河县| 子洲县| 灌阳县| 洪湖市| 长乐市| 建昌县| 时尚|