最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python基于C/S模式實(shí)現(xiàn)聊天室功能

 更新時間:2019年01月09日 15:13:54   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了python基于C/S模式實(shí)現(xiàn)聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最簡單的模式,C/S模式實(shí)現(xiàn)聊天室

從半雙工開始,何謂半雙工?半雙工即是說雙方可以互發(fā)消息,但一次只能一個用戶發(fā)送。

 只要稍微會點(diǎn)socket編程的人都會覺得很簡單,所以過過場,直接上代碼。

服務(wù)器端代碼:

from socket import *
from time import ctime
 
HOST = ''
PORT = 4568
BUFSIZE = 1024
ADDR = (HOST,PORT)
 
tcpSerSocket = socket(AF_INET, SOCK_STREAM)
tcpSerSocket.bind(ADDR)
tcpSerSocket.listen(5)
 
while True:
 print('waitint for connection...')
 tcpCliSocket, addr = tcpSerSocket.accept()
 print('connecting from: ', addr)
 
 while True:
 data = tcpCliSocket.recv(BUFSIZE)
 if not data:
  break
 print data
 msg = raw_input('>')
 tcpCliSocket.send('[%s] %s' % (ctime(), msg))
 
tcpCliSocket.close()
tcpSerSocket.close()

客戶端代碼:

from socket import *
 
HOST = 'localhost'
PORT = 4568
BUFSIZE = 1024
ADDR = (HOST, PORT)
 
tcpCliSocket = socket(AF_INET, SOCK_STREAM)
tcpCliSocket.connect(ADDR)
 
while True:
 data = raw_input('>>')
 if not data:
 break
 tcpCliSocket.send(data)
 data = tcpCliSocket.recv(BUFSIZE)
 if not data:
 break
 print data
 
tcpCliSocket.close()

運(yùn)行結(jié)果我就不截圖了,如果還不會的就復(fù)制下來運(yùn)行一遍。

上面只是最簡單的入門,一點(diǎn)都不好使,問題多著。

下面看怎么實(shí)現(xiàn)全雙工。全雙工就是雙方可任意給對方發(fā)送消息。

全雙工明顯要用到多線程。我們在主線程之外創(chuàng)建兩個子線程,一個負(fù)責(zé)接收消息,另一個負(fù)責(zé)接受用戶輸入并發(fā)送消息。

服務(wù)器端代碼:

#coding: utf-8
from socket import *
from time import ctime
import threading
from sys import stdout
 
HOST = ''
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)
 
def Send(sck):
 while True:
 data = raw_input('>')
 sck.send(data)
 
def Deal(sck, addr):
 while True:
 data = sck.recv(BUFSIZE)
 if data == "quit":
  sck.close()
  break
 str = '\nfrom' + addr[0] + ':' + data + '\n>'
 stdout.write(str)
 
chatSerSock = socket(AF_INET, SOCK_STREAM)
chatSerSock.bind(ADDR)
chatSerSock.listen(5)
 
threads = []
 
while True:
 print 'waiting for connection...'
 chatCliSock, addr = chatSerSock.accept()
 print "...connected from: ", addr
 t = threading.Thread(target=Deal, args=(chatCliSock, addr))
 threads.append(t)
 t = threading.Thread(target=Send, args=(chatCliSock,))
 threads.append(t)
 for i in range(len(threads)):
 threads[i].start()
 threads[0].join()
 
chatCliSock.close()
chatSerSock.close()

客戶端代碼:

#coding: utf8
from socket import *
from time import ctime
import threading
from sys import stdout
 
def Send(sck, test):
 while True:
 data = raw_input('>')
 sck.send(data)
 if data == "quit":
  break
def Recieve(sck, test):
 while True:
 data = sck.recv(BUFSIZ)
 if data == "quit":
  sck.close()
  break
 str = "\nfrom server:" + data + "\n>"
 stdout.write(str)
 
HOST = 'localhost'
PORT= 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
threads = []
 
if __name__ == "__main__":
 chatCliSock = socket(AF_INET, SOCK_STREAM)
 chatCliSock.connect(ADDR)
 t = threading.Thread(target=Send, args = (chatCliSock, None))
 threads.append(t)
 t = threading.Thread(target=Recieve, args = (chatCliSock, None))
 threads.append(t)
 for i in range(len(threads)):
 threads[i].start()
 threads[0].join()
 
chatCliSock.close()

運(yùn)行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實(shí)現(xiàn)微信打飛機(jī)游戲

    python實(shí)現(xiàn)微信打飛機(jī)游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)微信打飛機(jī)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python+OpenCV圖像處理—— 色彩空間轉(zhuǎn)換

    Python+OpenCV圖像處理—— 色彩空間轉(zhuǎn)換

    這篇文章主要介紹了Python+OpenCV如何對圖片進(jìn)行色彩空間轉(zhuǎn)換,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下下
    2020-10-10
  • pytorch 常用線性函數(shù)詳解

    pytorch 常用線性函數(shù)詳解

    今天小編就為大家分享一篇pytorch 常用線性函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python實(shí)現(xiàn)淘寶秒殺腳本

    python實(shí)現(xiàn)淘寶秒殺腳本

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)淘寶秒殺腳本,掃碼登錄版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python import自定義模塊方法

    Python import自定義模塊方法

    python包含子目錄中的模塊方法比較簡單,關(guān)鍵是能夠在sys.path里面找到通向模塊文件的路徑。下面給大家介紹python import自定義模塊方法,需要的的朋友參考下
    2015-02-02
  • 使用Eclipse如何開發(fā)python腳本

    使用Eclipse如何開發(fā)python腳本

    這篇文章主要為大家詳細(xì)介紹了使用Eclipse開發(fā)python腳本的相關(guān)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python爬蟲之requests庫使用代理方式

    python爬蟲之requests庫使用代理方式

    這篇文章主要介紹了python爬蟲之requests庫使用代理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • django+js+ajax實(shí)現(xiàn)刷新頁面的方法

    django+js+ajax實(shí)現(xiàn)刷新頁面的方法

    這篇文章主要介紹了django+js+ajax實(shí)現(xiàn)刷新頁面的方法,結(jié)合實(shí)例形式分析了django實(shí)現(xiàn)ajax刷新頁面功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • Spyder中如何設(shè)置默認(rèn)python解釋器

    Spyder中如何設(shè)置默認(rèn)python解釋器

    Spyder作為一款流行的Python IDE,支持用戶自定義Python解釋器,包括虛擬環(huán)境的設(shè)置,通過打開Spyder,選擇“Tools”->“Preferences”,在彈出窗口中選擇“Use the following Python interpreter”后,瀏覽并選擇相應(yīng)的解釋器或虛擬環(huán)境路徑
    2024-09-09
  • 使用wxPython獲取系統(tǒng)剪貼板中的數(shù)據(jù)的教程

    使用wxPython獲取系統(tǒng)剪貼板中的數(shù)據(jù)的教程

    這篇文章主要介紹了使用wxPython獲取系統(tǒng)剪貼板中的數(shù)據(jù)的教程,wxPython是一個非常受歡迎的Python圖形庫,需要的朋友可以參考下
    2015-05-05

最新評論

收藏| 汉阴县| 夏津县| 尤溪县| 黑龙江省| 湛江市| 墨脱县| 苏尼特左旗| 蒲江县| 修文县| 陵川县| 施甸县| 荆州市| 济阳县| 区。| 周至县| 思南县| 敦化市| 武隆县| 平定县| 海盐县| 永嘉县| 马山县| 双辽市| 太仓市| 建瓯市| 内乡县| 桦甸市| 池州市| 特克斯县| 永川市| 灵璧县| 四子王旗| 鹰潭市| 蓝田县| 南部县| 淳安县| 阜康市| 乡宁县| 库尔勒市| 晋州市|