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

基于python3的socket聊天編程

 更新時(shí)間:2020年02月17日 14:22:02   作者:Dyy8686  
這篇文章主要為大家詳細(xì)介紹了基于python3的socket聊天編程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了基于python3的socket聊天編程,供大家參考,具體內(nèi)容如下

階段一:最簡(jiǎn)易的聊天系統(tǒng)

缺點(diǎn):程序不夠完善,只能一來一回,且沒人每次只能說一句話

server端:

import socket
HostPort = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(HostPort)
s.listen(1)
conn,addr = s.accept()
#print('Connecting by : %s ' % addr)
while 1:
 data = conn.recv(1024).decode()
 print (data)
 user_input = input('>>>')
 conn.send(user_input.encode('utf8'))
 #conn.close()
s.close()

client端:

import socket
hostport = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(hostport)
 
while 1:
 user_input = input('>>> ').strip()
 s.send(user_input.encode('utf-8'))
 if len(user_input) == 0:
 continue
 if user_input == 'quit':
 s.close()
 break
 server_reply = s.recv(1024).decode()
 print (server_reply)

注意事項(xiàng):在python 3中,bytes和str是兩個(gè)不同的概念,send和recv的數(shù)據(jù)都是bytes,而str轉(zhuǎn)化成bytes是通過encode('utf8')實(shí)現(xiàn),bytes轉(zhuǎn)化成str,是通過decode()實(shí)現(xiàn);

在該階段,服務(wù)十分不穩(wěn)定,經(jīng)常會(huì)斷開,所以有下一個(gè)階段,且每人每次可以發(fā)送多條消息;

階段二  多線程并發(fā)聊天系統(tǒng)

在階段一中,服務(wù)器端和客戶的通信只能一發(fā)一收,不能實(shí)現(xiàn)服務(wù)器端和客戶端雙方的自由消息發(fā)送,所以,我們引用多線程,我們將消息的接收單獨(dú)開一個(gè)線程,這樣便可以服務(wù)器端和客戶端實(shí)現(xiàn)同時(shí)發(fā)送多條消息,并不影響接收;

開始上代碼:

server端:

import socket
import threading # 導(dǎo)入多線程模塊
print("Waitting to be connected......")
HostPort = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 創(chuàng)建socket實(shí)例
s.bind(HostPort)
s.listen(1)
conn,addr = s.accept()
true=True
addr = str(addr)
print('Connecting by : %s ' %addr )
def Receve(conn):   # 將接收定義成一個(gè)函數(shù)
 global true # 聲明全局變量,當(dāng)接收到的消息為quit時(shí),則觸發(fā)全局變量 true = False,則會(huì)將socket關(guān)閉
 while true:
 data = conn.recv(1024).decode('utf8') 
 if data == 'quit':
 true=False
 print("you have receve: "+data+" from"+addr) # 當(dāng)接收的值為'quit'時(shí),退出接收線程,否則,循環(huán)接收并打印
thrd=threading.Thread(target=Receve,args=(conn,)) # 線程實(shí)例化,target為方法,args為方法的參數(shù) 
thrd.start()    # 啟動(dòng)線程
while true:
 user_input = input('>>>')
 conn.send(user_input.encode('utf8'))  # 循環(huán)發(fā)送消息
 if user_input == 'quit':   # 當(dāng)發(fā)送為‘quit'時(shí),關(guān)閉socket
 true = False
 #conn.close()
s.close()

client 端

import socket
import threading
hostport = ('127.0.0.1',9999)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(hostport)
true = True
def Receve(s):
 global true
 while true:
 data = s.recv(1024).decode('utf8')
 if data == 'quit':
 true = False
 print('recevie news:\033[5;37;46m%s\033[0m' % data )
thrd=threading.Thread(target=Receve,args=(s,))
thrd.start()
while true:
 user_input = input('>>>')
 s.send(user_input.encode('utf8'))
 if user_input == 'quit':
 true = False
s.close()

效果展示(紫色字體為接收消息,白色字體為發(fā)送消息,雙方任意一方輸入'quit',即可退出)

1、服務(wù)器端:(原來只能服務(wù)器端先接收消息后才能發(fā)送消息,現(xiàn)在沒有這種限制,可以隨時(shí)主動(dòng)發(fā)送)

2、客戶端     

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

相關(guān)文章

  • Python中?*?號(hào)的用法總結(jié)

    Python中?*?號(hào)的用法總結(jié)

    Python中的?*號(hào)是一個(gè)特殊的符號(hào),在其他編程語言中,它最廣為人知的用途就是作為乘法運(yùn)算的符號(hào),本文總結(jié)了Python中*號(hào)的所有用途,希望對(duì)大家有所幫助
    2023-11-11
  • Django使用Celery實(shí)現(xiàn)異步發(fā)送郵件

    Django使用Celery實(shí)現(xiàn)異步發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了Django如何使用Celery實(shí)現(xiàn)異步發(fā)送郵件的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • python+PyQT實(shí)現(xiàn)系統(tǒng)桌面時(shí)鐘

    python+PyQT實(shí)現(xiàn)系統(tǒng)桌面時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了python+PyQT實(shí)現(xiàn)系統(tǒng)桌面時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python實(shí)現(xiàn)八皇后問題示例代碼

    Python實(shí)現(xiàn)八皇后問題示例代碼

    這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)八皇后問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Python格式化字符串f-string概覽(小結(jié))

    Python格式化字符串f-string概覽(小結(jié))

    這篇文章主要介紹了Python格式化字符串f-string概覽(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 解決pytorch 的state_dict()拷貝問題

    解決pytorch 的state_dict()拷貝問題

    這篇文章主要介紹了解決pytorch 的state_dict()拷貝問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python 接口實(shí)現(xiàn) 供第三方調(diào)用的例子

    python 接口實(shí)現(xiàn) 供第三方調(diào)用的例子

    今天小編就為大家分享一篇python 接口實(shí)現(xiàn) 供第三方調(diào)用的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python docx庫(kù)代碼演示

    Python docx庫(kù)代碼演示

    這篇文章主要介紹了Python docx庫(kù)用法,結(jié)合實(shí)例形式分析了docx庫(kù)相關(guān)的docx文件讀取、文本添加、格式操作,需要的朋友可以參考下
    2021-10-10
  • 學(xué)習(xí)python處理python編碼問題

    學(xué)習(xí)python處理python編碼問題

    概括從python開始就處理unicode字符,python源文件的編碼與解碼,我們寫的python程序從產(chǎn)生到執(zhí)行的過程如下
    2011-03-03
  • Python jieba結(jié)巴分詞原理及用法解析

    Python jieba結(jié)巴分詞原理及用法解析

    這篇文章主要介紹了Python jieba結(jié)巴分詞原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論

临沭县| 富宁县| 峨山| 晋宁县| 枣强县| 元谋县| 柳州市| 浮山县| 大渡口区| 扬中市| 新营市| 林甸县| 白银市| 常熟市| 兴安县| 洛阳市| 英山县| 泸水县| 特克斯县| 珠海市| 京山县| 开江县| 平昌县| 乌兰浩特市| 长葛市| 崇阳县| 特克斯县| 常德市| 东阿县| 喀喇| 陵水| 鄂伦春自治旗| 鄂尔多斯市| 独山县| 汝阳县| 仁布县| 平度市| 北票市| 南丹县| 灵丘县| 什邡市|