作者:小K
來源:麥?zhǔn)寰幊?/p>
“
今天教大家寫個(gè)聊天室功能,該程序只有幾十行代碼,這比動輒幾百兆的通訊軟件包來說簡直就是“神純凈版本”。而且關(guān)閉解釋環(huán)境之后是不會留下任何信息痕跡的,所以可以放心使用。
原理/流程
需要用到TCP/IP協(xié)議,Socket技術(shù)。
先寫個(gè)主機(jī)端(Server)
import sockethost = socket.gethostname() #獲取主機(jī)地址port = 8888 #設(shè)置端口號nick_name = “麥?zhǔn)?#8221;s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((host, port)) # 綁定地址s.listen(1) # 設(shè)置最多連接數(shù)量sock, addr = s.accept() # 被動接收TCP客戶端連接print(‘Connected’)info = sock.recv(1024).decode() # 接收Client數(shù)據(jù)while ‘Quit’ not in info: if info: print(info) send_data = input(‘輸入發(fā)送內(nèi)容:’) send_data = nick_name + “: ” + send_data sock.send(send_data.encode()) # 發(fā)送TCP數(shù)據(jù)包 if ‘Quit’ in send_data: break info = sock.recv(1024).decode() # 接收Client數(shù)據(jù)sock.close() # 關(guān)閉客戶端Sockets.close() # 關(guān)閉服務(wù)端Socket
主機(jī)端代碼分為三部分,
第一部分:構(gòu)建主機(jī)的HOST和PORT…創(chuàng)建監(jiān)聽任務(wù);
第二部分:接收發(fā)送 數(shù)據(jù);
第三部分:當(dāng)輸入“Quit”之后,斷開連接,程序結(jié)束(影響客戶端)。
再寫個(gè)客戶端(Client)
import sockets = socket.socket() # 創(chuàng)建TCP/IP套接字host = socket.gethostname() # 獲取主機(jī)地址port = 8888nick_name = “小K”s.connect((host, port)) # 初始化TCP服務(wù)器連接print(‘Client Connected’)info = ”while ‘Quit’ not in info: send_data = input(‘輸入發(fā)送的內(nèi)容:’) send_data = nick_name + “: ” + send_data s.send(send_data.encode()) # 發(fā)送TCP數(shù)據(jù) if ‘Quit’ in send_data: break info = s.recv(1024).decode() #接收服務(wù)端數(shù)據(jù) print(info)s.close() # 關(guān)閉Socket連接
主機(jī)端代碼分也為三部分,
第一部分:構(gòu)建HOST和PORT信息,并與主機(jī)端創(chuàng)建連接;
第二部分:接收發(fā)送 數(shù)據(jù);
第三部分:當(dāng)輸入“Quit”之后,斷開連接,程序結(jié)束(不影響主機(jī)端)。
試試功能
使用兩個(gè)命令行終端,分別運(yùn)行兩個(gè)代碼文件;
聊天功能;
體驗(yàn)非常好!
后記
上文的兩段代碼只是實(shí)現(xiàn)了最簡單的聊天功能,如果想做的更像一個(gè)聊天室,可以在上面的代碼中對其進(jìn)行深度開發(fā)。
最后可能會開發(fā)出一個(gè)QQ一樣的程序~
CDA數(shù)據(jù)分析師分享案例,歡迎大家留言分享你的建議。