《Python編程入門與實(shí)踐(微視頻版)》代碼 例11-8 制作簡(jiǎn)易聊天窗口_第1頁(yè)
《Python編程入門與實(shí)踐(微視頻版)》代碼 例11-8 制作簡(jiǎn)易聊天窗口_第2頁(yè)
《Python編程入門與實(shí)踐(微視頻版)》代碼 例11-8 制作簡(jiǎn)易聊天窗口_第3頁(yè)
《Python編程入門與實(shí)踐(微視頻版)》代碼 例11-8 制作簡(jiǎn)易聊天窗口_第4頁(yè)
《Python編程入門與實(shí)踐(微視頻版)》代碼 例11-8 制作簡(jiǎn)易聊天窗口_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

例11-8制作簡(jiǎn)易聊天窗口例11-8制作簡(jiǎn)易聊天窗口本例制作簡(jiǎn)易聊天窗口。本例演示如何通過Socket實(shí)現(xiàn)客戶端與服務(wù)器之間的簡(jiǎn)單聊天功能。客戶端可以向服務(wù)器發(fā)送文本消息,服務(wù)器接收后將消息內(nèi)容返回給客戶端??蛻舳私邮盏巾憫?yīng)后顯示該信息,并可繼續(xù)發(fā)送消息。當(dāng)任一方輸入“byebye”時(shí),聊天會(huì)話結(jié)束。(1)創(chuàng)建server.py文件(服務(wù)器程序):importsockethost=socket.gethostname()#獲取主機(jī)地址port=12345#設(shè)置端口號(hào)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創(chuàng)建TCP/IP套接字s.bind((host,port))#綁定地址(host,port)到套接字s.listen(1)#設(shè)置最大連接數(shù)量sock,addr=s.accept()#被動(dòng)接收TCP客戶端連接print('連接已經(jīng)建立')info=sock.recv(1024).decode()#接收客戶端數(shù)據(jù)whileinfo!='byebye':#判斷是否退出ifinfo:print('接收到的內(nèi)容:'+info)send_data=input('輸入發(fā)送內(nèi)容:')#輸入要發(fā)送的消息sock.send(send_data.encode())#發(fā)送TCP數(shù)據(jù)ifsend_data=='byebye':#如果發(fā)送了byebye,退出breakinfo=sock.recv(1024).decode()#接收客戶端數(shù)據(jù)sock.close()#關(guān)閉客戶端套接字s.close()#關(guān)閉服務(wù)器套接字(2)創(chuàng)建client.py文件(客戶端程序):importsocket#導(dǎo)入socket模塊s=socket.socket()#創(chuàng)建TCP/IP套接字host=socket.gethostname()#獲取主機(jī)地址port=12345#設(shè)置端口號(hào)s.connect((host,port))#主動(dòng)初始化TCP服務(wù)器連接print("已連接")info=""whileinfo!='byebye':#判斷是否退出send_data=input('輸入發(fā)送內(nèi)容:')#輸入內(nèi)容s.send(send_data.encode())#發(fā)送TCP數(shù)據(jù)ifsend_data=='byebye':#判斷是否退出breakinfo=s.recv(1024).decode()#接收服務(wù)器數(shù)據(jù)print('接收到的內(nèi)容:'+info)s.close()#關(guān)閉套接字打開兩個(gè)cmd命令行窗口,分別運(yùn)行server.py和client.py文件,用戶可以在打開的兩個(gè)窗口中聊天,如圖11-8所示。(a)server.py(b)client.py圖11-8客戶端和服務(wù)器建立連接當(dāng)輸入byebye時(shí),將結(jié)束會(huì)話,如圖11-9所示。圖11-9結(jié)束會(huì)話代碼解釋:1)server.py文件(1)導(dǎo)入模塊importsocket導(dǎo)入Python的socket模塊,用于創(chuàng)建和管理網(wǎng)絡(luò)套接字(Socket)。(2)獲取主機(jī)地址并設(shè)置端口號(hào)host=socket.gethostname()#獲取主機(jī)地址port=12345#設(shè)置端口號(hào)socket.gethostname():獲取當(dāng)前主機(jī)的名稱,通常是一個(gè)域名或主機(jī)名。port=12345:定義一個(gè)端口號(hào),用于監(jiān)聽客戶端的連接。(3)創(chuàng)建TCP/IP套接字s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創(chuàng)建TCP/IP套接字socket.AF_INET:指定使用IPv4地址族。socket.SOCK_STREAM:指定使用TCP協(xié)議。這行代碼創(chuàng)建了一個(gè)TCP/IP套接字對(duì)象s。(4)綁定地址到套接字s.bind((host,port))#綁定地址(host,port)到套接字將套接字綁定到指定的主機(jī)地址和端口號(hào)。這意味著服務(wù)器將在host上的port端口監(jiān)聽客戶端的連接。(5)設(shè)置最大連接數(shù)量s.listen(1)#設(shè)置最大連接數(shù)量s.listen(1):將套接字設(shè)置為監(jiān)聽模式,允許的最大連接數(shù)為1。這意味著服務(wù)器一次只能接受一個(gè)客戶端的連接。如果需要支持多個(gè)客戶端,可以將參數(shù)設(shè)置為更大的值。(6)被動(dòng)接收客戶端連接sock,addr=s.accept()#被動(dòng)接收TCP客戶端連接print('連接已經(jīng)建立')s.accept():阻塞等待客戶端的連接。當(dāng)有客戶端連接時(shí),返回一個(gè)新套接字對(duì)象sock和客戶端的地址addr。sock:用于與客戶端進(jìn)行通信的套接字。addr:客戶端的地址(IP地址和端口號(hào))。打印“連接已經(jīng)建立”,表示服務(wù)器已成功接收客戶端的連接。(7)接收客戶端數(shù)據(jù)info=sock.recv(1024).decode()#接收客戶端數(shù)據(jù)sock.recv(1024):從客戶端接收數(shù)據(jù),最大接收長(zhǎng)度為1024字節(jié)。.decode():將接收到的字節(jié)數(shù)據(jù)解碼為字符串(假設(shè)客戶端發(fā)送的是UTF-8編碼的字符串)。(8)交互邏輯whileinfo!='byebye':#判斷是否退出ifinfo:print('接收到的內(nèi)容:'+info)send_data=input('輸入發(fā)送內(nèi)容:')#輸入要發(fā)送的消息sock.send(send_data.encode())#發(fā)送TCP數(shù)據(jù)ifsend_data=='byebye':#如果發(fā)送了byebye,退出breakinfo=sock.recv(1024).decode()#接收客戶端數(shù)據(jù)環(huán)條件:當(dāng)接收到的客戶端消息不是'byebye'時(shí),繼續(xù)交互。接收和打印客戶端消息:如果接收到的消息不為空,打印“接收到的內(nèi)容:”加上客戶端發(fā)送的內(nèi)容。發(fā)送消息給客戶端:①使用input()獲取用戶輸入的消息。②使用sock.send(send_data.encode())將消息發(fā)送給客戶端(將字符串編碼為字節(jié))。退出條件:如果用戶輸入的消息是'byebye',退出循環(huán)。繼續(xù)接收客戶端消息:在循環(huán)中繼續(xù)調(diào)用sock.recv(1024).decode()接收客戶端的下一條消息。(9)關(guān)閉套接字sock.close()#關(guān)閉客戶端套接字s.close()#關(guān)閉服務(wù)器套接字sock.close():關(guān)閉與客戶端的連接套接字。s.close():關(guān)閉服務(wù)器的監(jiān)聽套接字。2)client.py文件(1)導(dǎo)入模塊importsocket#導(dǎo)入socket模塊導(dǎo)入Python的socket模塊,用于創(chuàng)建和管理網(wǎng)絡(luò)套接字(Socket)。(2)創(chuàng)建TCP/IP套接字s=socket.socket()#創(chuàng)建TCP/IP套接字創(chuàng)建一個(gè)默認(rèn)的套接字對(duì)象s。默認(rèn)情況下,socket.socket()創(chuàng)建的是一個(gè)IPv4的TCP套接字(等同于socket.socket(socket.AF_INET,socket.SOCK_STREAM))。(3)獲取主機(jī)地址并設(shè)置端口號(hào)host=socket.gethostname()#獲取主機(jī)地址port=12345#設(shè)置端口號(hào)socket.gethostname():獲取當(dāng)前主機(jī)的名稱,通常是一個(gè)域名或主機(jī)名。port=12345:定義一個(gè)端口號(hào),用于連接服務(wù)器。(4)主動(dòng)初始化TCP服務(wù)器連接s.connect((host,port))#主動(dòng)初始化TCP服務(wù)器連接print("已連接")使用s.connect((host,port))主動(dòng)連接到指定的服務(wù)器地址和端口號(hào)。如果連接成功,打印“已連接”。(5)交互邏輯info=""whileinfo!='byebye':#判斷是否退出send_data=input('輸入發(fā)送內(nèi)容:')#輸入內(nèi)容s.send(send_data.encode())#發(fā)送TCP數(shù)據(jù)ifsend_data=='byebye':#判斷是否退出breakinfo=s.recv(1024).decode()#接收服務(wù)器數(shù)據(jù)print('接收到的內(nèi)容:'+info)循環(huán)條件:當(dāng)接收到的服務(wù)器消息不是'byebye'時(shí),繼續(xù)交互。發(fā)送消息給服務(wù)器:①使用input()獲取用戶輸入的消息。②使用s.send(send_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論