999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Python的網(wǎng)絡聊天室設計

2019-06-20 10:31:23鄧亞君楊剛翁文斌邱瀘誼
電子技術與軟件工程 2019年5期
關鍵詞:用戶

鄧亞君 楊剛 翁文斌 邱瀘誼

摘要??? 本文使用的網(wǎng)絡編程模型是客戶端/服務端(C/S)結構,網(wǎng)絡聊天功能通過socket模塊實現(xiàn),用戶在客戶端上登錄到指定端口的服務端與其他用戶進行網(wǎng)絡聊天。服務器啟動后,等待客戶端的連接,轉發(fā)客戶端指定的聊天用戶或所有的其他用戶??蛻舳藛雍笤赑ython的GUI界面接收用戶傳遞到服務器端的消息。某一用戶可以與指定用戶進行私聊,也可以向系統(tǒng)中其他已經(jīng)登錄的客戶發(fā)送消息實現(xiàn)自由聊天,同時可以管理好友列表如添加或刪除好友。

【關鍵詞】網(wǎng)絡通信socket多線程GUI界面

1 前言

在互聯(lián)網(wǎng)相當流行的時代,人們對網(wǎng)絡的依賴與日俱增,網(wǎng)絡交流更是成為了人們生活的一部分。借助網(wǎng)絡聊天工具,人們足不出戶就可實現(xiàn)閑聊甚至工作交流,使人們的日常生活與工作需求更加便利。網(wǎng)絡聊天室主要包括文字聊天室和視頻聊天室這兩種。本次設計的文字聊天室使用的是Python語言,它具有面向?qū)ο蟆⑴c平臺無關、安全、多線程等特點。

2 總體方案設計

2.1 設計原理

Socket對象在網(wǎng)絡編程中承擔著重要任務,能夠用套接字技術編寫一個網(wǎng)絡聊天室,每個用戶需要服務器啟動一個線程進行相應工作。在該線程中借助套接字實現(xiàn)客戶間信息交流,當服務器接收到客戶端發(fā)送的聊天信息時,服務器可以在相應的線程的輸入流中寫入相關信息,然后特定的客戶套接字的輸入流便能讀取到相關信息。

2.2 基本設計概念和處理流程

本系統(tǒng)運行用Python開發(fā),采用C/S結構,系統(tǒng)分為客戶端和服務端兩大部分,使用socket庫建立套接字實現(xiàn)客戶端和服務端的通信。

服務器端先將Socket初始化,然后綁定指定端口,實現(xiàn)端口監(jiān)聽,調(diào)用accept方法實現(xiàn)TCP阻塞,等待客戶端連接。如果這時有一個Socket對象被客戶端初始化,并向服務器請求連接。如果連接成功,數(shù)據(jù)便可以在客戶端與服務端之間進行傳遞。服務端接收客戶端發(fā)送的數(shù)據(jù)請求并處理,之后將回應數(shù)據(jù)發(fā)送給指定客戶端,該客戶端讀取相應數(shù)據(jù),如果沒有數(shù)據(jù)傳遞則關閉連接,交互完畢。如圖1所示。

這個聊天室采用的是面向連接的傳輸控制協(xié)議,即TCP(Transmission Control Protocol)。TCP協(xié)議在傳送數(shù)據(jù)前必須先建立連接,并在數(shù)據(jù)傳送后要釋放連接。TCP能夠?qū)崿F(xiàn)全雙工通信提供可靠交互的服務,能按序到達目的端,且不會出現(xiàn)錯誤。

3 單元模塊設計

3.1 客戶端

客戶端代碼可以實現(xiàn)在登錄窗口中通過套接字連接到本機IP地址127.0.0.1,端口號為9999的指定服務端。登錄時通過觸發(fā)登錄按鈕調(diào)用login_sever函數(shù),退出登錄時調(diào)用exit_system函數(shù)。使用Python的內(nèi)置模塊tkinter描繪界面,其模塊中的Tk接口是Python的標準GUI工具包的接口,使用import tkinter的命令即可將該模塊導入程序。編寫程序時,將窗口的長寬設置為不可變的情況,這樣可以保證內(nèi)部控件位置的合理性。用exit_system函數(shù)實現(xiàn)客戶端退出,login_sever函數(shù)實現(xiàn)登錄。在登錄函數(shù)中調(diào)用connect_sever函數(shù),創(chuàng)建socket對象,連接對應的服務端,并為該客戶端啟動一個線程。客戶端有顯示對話的功能,并且通過敏感字向聊天室的所有人發(fā)送消息,實現(xiàn)群聊和私聊。get_info函數(shù)可以實現(xiàn)接受服務器發(fā)來的消息,并且能夠?qū)⒑糜殃欠Q插入好友列表中。通過好友列表中的Delete鍵將來將好友刪除,以此來管理好友。在本程序中能夠自動將已發(fā)送消息的好友昵稱添加至好友列表。該功能的實現(xiàn)是調(diào)用tkinter模塊中l(wèi)istbox的delete方法,實現(xiàn)指定好友從列表中刪除??蛻舳四軌?qū)崿F(xiàn)將本用戶的消息發(fā)給服務端,并且在自己的消息框中展示。通過insert_user()函數(shù)將選中的好友名放入發(fā)送好友框中,進行指定好友通信,實現(xiàn)私聊??蛻舳说娜毫暮退搅牡南⒄故究梢栽谕淮翱谡故?。模擬客戶端E與客戶端Q私聊的消息可以在兩方的消息框中展示,并且不會被其他用戶看見他們之間私聊的消息。

3.2 服務端

在服務器程序中首先要綁定一個固定端口并監(jiān)聽來自其他客戶端的連接。如果某個客戶端已發(fā)送連接請求,服務器就與該客戶端建立Socket連接。在大量的客戶端連接中,服務器通過一個Socket連接的服務器地址與端口和客戶端的地址與端口來確定是否為唯一的Socket。之所以服務器要對每個客戶端的連接需要一個新的線程來處理,是因為服務器必須同時響應多個客戶端的請求。首先初始化socket對象,同時使用thread模塊實現(xiàn)多線程功能。然后調(diào)用Socket對象中的bind()函數(shù)來指定服務器的port端口和具體IP地址。最后調(diào)用socket對象的accept()方法,等待客戶端的連接,并返回連接對象。

1. win = tkinter.Tk() # 創(chuàng)建主窗口

2. win.mainloop() # 相應窗口動態(tài)

用tkinter實現(xiàn)GUI界面繪制,entryIp和entryport定義了兩個輸入框,從鍵盤中獲得服務器的地址和端口。在本程序運行中,采用本機地址127.0.0.1,選擇數(shù)值較大且不易被計算機使用的端口號9999。對“啟動”按鍵進行綁定函數(shù)startSever,用來為服務器運行開啟一個線程。

1. def startSever():

2. s = threading.Thread(target=start)# 啟 用一個線程開啟服務器

3. s.start()# 開啟線程

在為服務器啟動的線程中,自動觸發(fā)start函數(shù),使服務器開始監(jiān)聽客戶連接,并進行相應的要求應答。服務器每次收到一個客戶端的連接請求就為它開啟一個線程,同時觸發(fā)run函數(shù)。在該函數(shù)中使用while True命令實現(xiàn)服務端不斷接收客戶端的信息的功能。在run函數(shù)里面,服務器使用ck.recv(1024)指令接收客戶端發(fā)送的消息,并且在for循環(huán)中,判斷客戶發(fā)來的消息中是否含有“@全體成員”,對infolist客戶列表進行遍歷,將消息發(fā)送給所有客戶端。

在客戶登錄后,通過廣播歡迎消息,可以使客戶盡快向聊天室的其他成員發(fā)送消息,這樣就可以在房間內(nèi)自由聊天。

4 總體系統(tǒng)

在進行測試系統(tǒng)時,先運行服務端程序,通過操作建立模擬服務器,等待客戶端的連接。在本設計中,總共運行了三次客戶端的程序,分別模擬用戶Q、用戶W和用戶E。三個客戶分別登錄到模擬服務器,所以只需要向服務器發(fā)送消息,便可以向其他用戶發(fā)送相應的消息。客戶可以向全體成員發(fā)送消息,并且客戶端之間互發(fā)消息不被別人知曉。

能夠?qū)崿F(xiàn)服務器與和客戶端之間的通信依賴于socket庫的網(wǎng)絡編程的方法。s.bind()將套接字綁定到指定地址,s.listen(num)開始監(jiān)聽傳入連接,其中num的含義是在拒絕連接之前,計算機可以掛起的最大連接數(shù)量,s.accept()接受連接并返回連接對象,可以用來接收和發(fā)送數(shù)據(jù),accept()方法采用阻塞式策略等待接收TCP客戶的連接。s.recv()用來接受套接字的數(shù)據(jù)。s.send()將接收到的數(shù)據(jù)發(fā)送到指定的套接字。以上幾種命令便是在本設計的客戶端和服務端程序中使用最多的方法,也是網(wǎng)絡通信必不可少的環(huán)節(jié)。

5 結論

服務端能夠顯示已連接的用戶,并且向指定用戶甚至所有用戶發(fā)送消息,存在特殊關鍵字的消息可以使人更加明確的知道是群聊消息,通過切換發(fā)送對象能夠隨時隨心的私聊??蛻舳说牧奶旖缑婵梢燥@示每條消息的發(fā)送時間,并且可以在好友列表中自動插入已給自己發(fā)送信息的用戶名??蛻艨梢酝ㄟ^刪除鍵刪除好友名稱,也可以在發(fā)送框中選擇未在列表里的在線用戶進行交流。

參考文獻

[1]楊心強,陳國有.數(shù)據(jù)通信與計算機網(wǎng)絡[M].北京:電子工業(yè)出版社,2018(06).

[2]張蕾.網(wǎng)絡控制中心的遠程智能監(jiān)控系統(tǒng)[J].科技資訊,2014.

[3]王豐錦,邵新宇,喻道遠,李培根.基于SOCKET和多線程的應用程序間通信技術的研究[J].計算機應用,2000(06).

[4]楊國軍.一種基于WinSocket的聊天程序設計方法[J].內(nèi)江科技,2007(02).

猜你喜歡
用戶
雅閣國內(nèi)用戶交付突破300萬輛
車主之友(2022年4期)2022-08-27 00:58:26
您撥打的用戶已戀愛,請稍后再哭
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年5期)2016-11-28 09:55:15
兩新黨建新媒體用戶與全網(wǎng)新媒體用戶之間有何差別
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
挖掘用戶需求尖端科技應用
Camera360:拍出5億用戶
100萬用戶
主站蜘蛛池模板: 国产福利一区在线| 欧美日韩综合网| 欧美一区二区丝袜高跟鞋| 久久精品国产免费观看频道| 六月婷婷精品视频在线观看| 久久天天躁狠狠躁夜夜2020一| 色婷婷综合激情视频免费看| 99久久精品久久久久久婷婷| 亚洲视屏在线观看| 亚洲欧美成人网| 亚洲人成高清| 不卡国产视频第一页| 欧美另类一区| 亚洲综合激情另类专区| av一区二区人妻无码| 国产成人无码播放| 成人在线观看一区| 亚洲一区第一页| 国产精品熟女亚洲AV麻豆| AV不卡无码免费一区二区三区| 小蝌蚪亚洲精品国产| 一级毛片免费不卡在线| 精品国产黑色丝袜高跟鞋| 女同久久精品国产99国| 久久精品女人天堂aaa| 2019国产在线| 超级碰免费视频91| 亚洲精品无码在线播放网站| 亚洲一级毛片免费看| 亚洲高清国产拍精品26u| 亚洲AV电影不卡在线观看| 亚洲欧洲自拍拍偷午夜色无码| 亚洲天堂日韩在线| 乱系列中文字幕在线视频| 久久精品这里只有精99品| 天天操精品| 国产成人精品视频一区二区电影 | 久久这里只有精品66| 国产福利在线观看精品| 九九香蕉视频| 午夜少妇精品视频小电影| 国产综合日韩另类一区二区| 99久久国产综合精品2023| 91色综合综合热五月激情| 欧美日本在线一区二区三区| 国产91高清视频| 99一级毛片| 伊人久久婷婷| 国产精品片在线观看手机版| 国产91九色在线播放| 最新日韩AV网址在线观看| 亚洲最猛黑人xxxx黑人猛交| 亚洲视频色图| 亚洲欧美极品| 99视频在线看| 自拍偷拍欧美| 色偷偷一区二区三区| 91人妻日韩人妻无码专区精品| 国产特级毛片aaaaaa| 日韩欧美国产综合| 欧美日韩国产精品综合| 国产成人亚洲综合A∨在线播放| 久久这里只精品国产99热8| 国产裸舞福利在线视频合集| 国产成人区在线观看视频| 成人在线不卡| 色网站在线视频| 一级福利视频| 国产乱人免费视频| 真实国产精品vr专区| 中文字幕人成人乱码亚洲电影| 久久久久免费看成人影片| 精品视频一区在线观看| 国产成人免费| 亚洲欧美日本国产综合在线| 午夜日本永久乱码免费播放片| 18禁影院亚洲专区| 国产第一页屁屁影院| 国产精品亚洲专区一区| 久久超级碰| 精品久久久久久久久久久| 99国产精品免费观看视频|