下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 落實(shí)國(guó)有資產(chǎn)管理報(bào)告制度
- 2026山西交通控股集團(tuán)有限公司所屬監(jiān)理集團(tuán)社會(huì)招聘30人參考考試試題附答案解析
- 2026年青島西海岸新區(qū)部分事業(yè)單位公開招聘工作人員8人備考考試試題附答案解析
- 2026中國(guó)科學(xué)院昆明動(dòng)物研究所管理部門崗位招聘2人(云南)參考考試題庫(kù)附答案解析
- 2026永修縣市場(chǎng)監(jiān)督管理局招聘工作人員2人參考考試試題附答案解析
- 2026中國(guó)科學(xué)院生態(tài)環(huán)境研究中心博士后招聘1人參考考試題庫(kù)附答案解析
- 2026年甘肅白銀市平川區(qū)容通水務(wù)有限公司招聘參考考試題庫(kù)附答案解析
- 2026內(nèi)蒙呼和浩特市青少年活動(dòng)中心招聘1人備考考試題庫(kù)附答案解析
- 2026廣東佛山市榮山中學(xué)面向社會(huì)招聘臨聘教師1人備考考試題庫(kù)附答案解析
- 地膜生產(chǎn)責(zé)任延伸制度
- 新版-八年級(jí)上冊(cè)數(shù)學(xué)期末復(fù)習(xí)計(jì)算題15天沖刺練習(xí)(含答案)
- 2024年風(fēng)電、光伏項(xiàng)目前期及建設(shè)手續(xù)辦理流程匯編
- 仁愛科普版(2024)八年級(jí)上冊(cè)英語(yǔ)Unit1~Unit6單元話題作文練習(xí)題(含答案+范文)
- 不良資產(chǎn)合作戰(zhàn)略框架協(xié)議文本
- 先進(jìn)班級(jí)介紹
- 2025年浙江省輔警考試真題及答案
- 2025中國(guó)熱帶農(nóng)業(yè)科學(xué)院科技信息研究所第一批招聘4人備考題庫(kù)(第1號(hào))附答案
- 雨課堂學(xué)堂在線學(xué)堂云《婚姻家庭法(武漢科大 )》單元測(cè)試考核答案
- 安徽寧馬投資有限責(zé)任公司2025年招聘派遣制工作人員考試筆試模擬試題及答案解析
- 2025版北師大版小學(xué)數(shù)學(xué)一年級(jí)上冊(cè)專項(xiàng)練習(xí)卷
- 2024-2025學(xué)年云南省昆明市五華區(qū)高一上學(xué)期期末質(zhì)量監(jiān)測(cè)歷史試題(解析版)
評(píng)論
0/150
提交評(píng)論