Python制作簡(jiǎn)易聊天器,搭建UDP網(wǎng)絡(luò)通信模型
前言:
互聯(lián)網(wǎng)的本質(zhì)是什么?其實(shí)就是信息的交換。就比如我們常用的QQ、微信等。那么如何將自己的信息發(fā)送到其他人的電腦上呢?
那就需要借助網(wǎng)絡(luò)模型來(lái)完成這樣的事情了。今天就帶領(lǐng)大家使用UDP網(wǎng)絡(luò)模型來(lái)完成一個(gè)簡(jiǎn)單的聊天器
分享內(nèi)容:
- python中的套接字實(shí)現(xiàn)
- 如何與Ubuntu建立通信
- 發(fā)送/接收消息
環(huán)境:
- windows
- Ubuntu
- python3
- pycharm
1.導(dǎo)入模塊
import socket
socket是套接字,鏈接電腦并且接收/發(fā)送消息的一個(gè)對(duì)象
socket有兩種類型:udp和tcp
udp比較簡(jiǎn)單 不安全 丟包的情況 速度快tcp比較復(fù)雜的網(wǎng)絡(luò)模型 安全 速度慢
2.創(chuàng)建一個(gè)套接字對(duì)象
def main(): ? ? udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp需要借助網(wǎng)絡(luò):IP協(xié)議
IP協(xié)議分為兩種:IPv4和IPv6
PC電腦采取的是IPv4,IPv6一般是移動(dòng)端使用:手機(jī)
3.發(fā)送數(shù)據(jù)到ubuntu系統(tǒng)中
udp_socket.sendto(b'hello python', ('192.168.3.40', 8080))
udp_socket.close()4.發(fā)送任意數(shù)據(jù)給網(wǎng)絡(luò)條數(shù)助手
def main():
? ? udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
? ? send_data = input('請(qǐng)輸入任意字符:')
? ? udp_socket.sendto(send_data.encode('utf-8'), ('192.168.3.40', 8080))
? ? udp_socket.close()5.循環(huán)發(fā)送數(shù)據(jù)
def main():
? ? # 創(chuàng)建套接字
? ? udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
? ? # 循環(huán)發(fā)送
? ? while True:
? ? ? ? send_data = input('請(qǐng)輸入你想要發(fā)送的數(shù)據(jù):')
? ? ? ? udp_socket.sendto(send_data.encode('utf-8'), ('192.168.3.40', 8080))
? ? ? ? if send_data == "exit":
? ? ? ? ? ? break
? ? udp_socket.close()6.循環(huán)接受數(shù)據(jù)
綁定本機(jī)信息 告訴ubuntu我的當(dāng)前地址以及端口
def main():
? ? udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
? ? localhost_addr = ('', 6666)
? ? udp_socket.bind(localhost_addr)循環(huán)接收
while True:
? ? recv_data = udp_socket.recvfrom(1024)
? ? # 元組解包
? ? recv_msg, recv_addr = recv_data
? ? print(recv_msg.decode('utf-8'), recv_addr)將相關(guān)的功能抽離出來(lái)做成一個(gè)函數(shù)
發(fā)送消息:
def send_msg(udp_socket):
? ? msg = input('請(qǐng)輸入你想要發(fā)送的消息:')
? ? udp_socket.sendto(msg.encode('utf-8'), ('192.168.3.40', 8080))接收消息:
def recv_msg(udp_socket):
? ? # 接收
? ? msg = udp_socket.recvfrom(1024)
? ? # 解碼
? ? recv_msg = msg[0].decode('utf-8')
? ? print(recv_msg)發(fā)送 / 接收 功能:
def main():
? ? udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
? ? udp_socket.bind(('', 6666))
? ? while True:
? ? ? ? op_num = input('請(qǐng)輸入要操作的功能序號(hào) [1.發(fā)送消息 2.接收消息]:' )
? ? ? ? # 根據(jù)用戶輸入的數(shù)字去調(diào)用相關(guān)的功能
? ? ? ? if op_num == "1":
? ? ? ? ? ? send_msg(udp_socket)
? ? ? ? elif op_num == "2":
? ? ? ? ? ? recv_msg(udp_socket)
? ? ? ? else:
? ? ? ? ? ? print('輸入有誤, 請(qǐng)重新輸入...')7.啟動(dòng)
if __name__ == '__main__': ? ? main()
最后運(yùn)行代碼
發(fā)送消息:

接收消息:

到此這篇關(guān)于Python制作簡(jiǎn)易聊天器,搭建UDP網(wǎng)絡(luò)通信模型的文章就介紹到這了,更多相關(guān)Python制作簡(jiǎn)易聊天器 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python?基于TCP?傳輸協(xié)議的網(wǎng)絡(luò)通信實(shí)現(xiàn)方法
- Python爬蟲(chóng)庫(kù)requests-html進(jìn)行HTTP請(qǐng)求HTML解析等高級(jí)功能應(yīng)用
- python內(nèi)置HTTP Server如何實(shí)現(xiàn)及原理解析
- Python實(shí)現(xiàn)http服務(wù)器(http.server模塊傳參?接收參數(shù))實(shí)例
- Python實(shí)現(xiàn)網(wǎng)絡(luò)通信的HTTP請(qǐng)求Socket編程Web爬蟲(chóng)方法探索
相關(guān)文章
webdriver.Chrome()沒(méi)反應(yīng)解決詳細(xì)圖文教程
這篇文章主要給大家介紹了關(guān)于webdriver.Chrome()沒(méi)反應(yīng)的解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-03-03
Python中的 No Module named ***問(wèn)題及解決
這篇文章主要介紹了Python中的 No Module named ***問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
一個(gè)入門(mén)級(jí)python爬蟲(chóng)教程詳解
這篇文章主要介紹了一個(gè)入門(mén)級(jí)python爬蟲(chóng)教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
PyTorch學(xué)習(xí)之軟件準(zhǔn)備與基本操作總結(jié)
這篇文章主要介紹了PyTorch學(xué)習(xí)之軟件準(zhǔn)備與基本操作總結(jié),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
Python編程中實(shí)現(xiàn)迭代器的一些技巧小結(jié)
只談迭代器的話在Python中只是一個(gè)泛指的概念,具體的可以用yield、生成器表達(dá)式、iter等多種方式來(lái)構(gòu)建,這里我們整理了Python編程中實(shí)現(xiàn)迭代器的一些技巧小結(jié):2016-06-06
Python 實(shí)現(xiàn)簡(jiǎn)單的電話本功能
這篇文章主要介紹了Python 實(shí)現(xiàn)簡(jiǎn)單的電話本功能的相關(guān)資料,包括添加聯(lián)系人信息,查找姓名顯示聯(lián)系人,存儲(chǔ)聯(lián)系人到 TXT 文檔等內(nèi)容,十分的細(xì)致,有需要的小伙伴可以參考下2015-08-08
python連接MySQL數(shù)據(jù)庫(kù)實(shí)例分析
這篇文章主要介紹了python連接MySQL數(shù)據(jù)庫(kù),實(shí)例分析了Python操作MySQL的相關(guān)技巧,需要的朋友可以參考下2015-05-05

