下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第利用Python打造一個(gè)多人聊天室的示例詳解vii.掌握利用Socket進(jìn)行編程的技術(shù)
viii.必須掌握多線(xiàn)程技術(shù),保證雙方可以同時(shí)發(fā)送
ix.建立聊天工具
x.可以和多個(gè)人同時(shí)進(jìn)行聊天
xi.必須使用圖形界面,顯示雙方的語(yǔ)錄
四、實(shí)驗(yàn)環(huán)境
PC多臺(tái),操作系統(tǒng)Win7,win10(32位、64位)
具備軟件python3.6。
五、操作方法與實(shí)驗(yàn)步驟
服務(wù)端
1.調(diào)入多線(xiàn)程、與scoket包,用于實(shí)現(xiàn)多線(xiàn)程連接
2.記錄本地地址與端口,開(kāi)啟監(jiān)聽(tīng),等待請(qǐng)求
3.收到某個(gè)客戶(hù)端的請(qǐng)求,建立連接,為每一個(gè)客戶(hù)端分配一個(gè)線(xiàn)程,并記錄客戶(hù)端地址與端口
4.收到某個(gè)客戶(hù)端發(fā)送的數(shù)據(jù),將數(shù)據(jù)轉(zhuǎn)發(fā)給所有與服務(wù)器連接的客戶(hù)機(jī)。
5.當(dāng)某個(gè)客戶(hù)端斷開(kāi)連接,通知所有與服務(wù)器連接的客戶(hù)機(jī)。
6.服務(wù)器一直保持監(jiān)聽(tīng)狀態(tài),等待其他客戶(hù)端接入服務(wù)器
7.代碼
importsocket
importthreading
num=0
defchat(service_client_socket,addr):
#等待接收客戶(hù)端消息存放在2個(gè)變量service_client_socket和addr里
ifnotaddrinuser:
print('Acceptnewconnectionfrom%s:%s...'%addr)
#如果addr不在user字典里則執(zhí)行以下代碼
forscsinserv_clie_socket:
serv_clie_socket[scs].send(data+'進(jìn)入聊天室...'.encode('utf-8'))
#發(fā)送user字典的data和address到客戶(hù)端
user[addr]=data.decode('utf-8')#data是最新進(jìn)入聊天室的客戶(hù),解壓后放入user
serv_clie_socket[addr]=service_client_socket#將服務(wù)器與服務(wù)器端口號(hào)為addr的套接字放入字典
#接收的消息解碼成utf-8并存在字典user里,鍵名定義為addr
#print("可以開(kāi)始聊天了")
#如果addr在user字典里,跳過(guò)本次循環(huán)
whileTrue:
d=service_client_socket.recv(1024)
if(('EXIT'.lower()ind.decode('utf-8'))|(d.decode('utf-8')=='error1')):
#如果EXIT在發(fā)送的data里
name=user[addr]
#user字典addr鍵對(duì)應(yīng)的值賦值給變量name
user.pop(addr)
serv_clie_socket.pop(addr)
#刪除user里的addr
forscsinserv_clie_socket:
#從user取出address
serv_clie_socket[scs].send((name+'離開(kāi)了聊天室...').encode('utf-8'))
#發(fā)送name和address到客戶(hù)端
print('Connectionfrom%s:%sclosed.'%addr)
globalnum
num=num-1
break
else:
print('"%s"from%s:%s'%(d.decode('utf-8'),addr[0],addr[1]))
forscsinserv_clie_socket:
#從user遍歷出address
ifserv_clie_socket[scs]!=service_client_socket:
#address不等于addr時(shí),執(zhí)行下面的代碼
serv_clie_socket[scs].send(d)
#發(fā)送data到客戶(hù)端
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創(chuàng)建socket對(duì)象
addr=('127.0.0.1',9999)
s.bind(addr)#綁定地址和端口
s.listen(128)
print('TCPServeron',addr[0],":",addr[1],"......")
user={}#存放字典{addr:name}
serv_clie_socket={}#存放{socket:不同線(xiàn)程的套接字}
whileTrue:
try:
print("等待接收客戶(hù)端的連接請(qǐng)求....")
service_client_socket,addr=s.accept()#等待接收客戶(hù)端的連接請(qǐng)求
print("接收到客戶(hù)端的連接請(qǐng)求....")
exceptConnectionResetError:
print('Someoneleftunexcept.')
data=service_client_soc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 野生植物培植工復(fù)試水平考核試卷含答案
- 氟化稀土制備工崗前工藝分析考核試卷含答案
- 2026屆陜西省藍(lán)田縣生物高三第一學(xué)期期末考試模擬試題含解析
- 光纖光纜制造工崗前改進(jìn)考核試卷含答案
- 鐵路機(jī)車(chē)車(chē)輛制動(dòng)鉗工沖突管理模擬考核試卷含答案
- 廣東省揭陽(yáng)市普寧華美實(shí)驗(yàn)學(xué)校2026屆高三上數(shù)學(xué)期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 靜電成像顯影材料載體制造工崗前技巧考核試卷含答案
- 2026年流體力學(xué)與泵選型的關(guān)系
- 順酐裝置操作工崗前教育考核試卷含答案
- 企業(yè)簡(jiǎn)介培訓(xùn)
- 2025年福建省水利投資開(kāi)發(fā)集團(tuán)連城水務(wù)有限公司招聘筆試參考題庫(kù)含答案解析
- 股東清算解散協(xié)議書(shū)
- 產(chǎn)后腰背疼康復(fù)治療
- 2025年商業(yè)物業(yè)抵押貸款合同范本
- 2024用電信息采集系統(tǒng)技術(shù)規(guī)范第1部分:專(zhuān)變采集終端
- 浙江省杭州市2024年中考語(yǔ)文試卷(含答案)
- 四川省綿陽(yáng)市2020年中考數(shù)學(xué)試題(含解析)
- 期末達(dá)標(biāo)測(cè)試卷(試題)-2024-2025學(xué)年人教PEP版英語(yǔ)四年級(jí)上冊(cè)
- DLT 1563-2016 中壓配電網(wǎng)可靠性評(píng)估導(dǎo)則
- HJ 377-2019 化學(xué)需氧量(CODCr)水質(zhì)在線(xiàn)自動(dòng)監(jiān)測(cè)儀技術(shù)要求及檢測(cè)方法
- (正式版)SHT 3075-2024 石油化工鋼制壓力容器材料選用規(guī)范
評(píng)論
0/150
提交評(píng)論