Python Socket TCP雙端聊天功能實(shí)現(xiàn)過(guò)程詳解
SOCKET編程
- socket(套接字):是一個(gè)網(wǎng)絡(luò)通信的端點(diǎn),能實(shí)現(xiàn)不同主機(jī)的進(jìn)程通信, -通過(guò)IP+端口定位對(duì)方并發(fā)送消息的通信機(jī)制
- 分為UDP和TCP
- 客戶(hù)端Client: 發(fā)起訪問(wèn)的一-方
- 服務(wù)器端Server: 接受訪問(wèn)的一方
UDP編程
Server端流程
1.建立socket,socket是負(fù)貴具體通信的一個(gè)實(shí)例
2.綁定,為創(chuàng)建的socket指派固定的端口和ip地址
3.接受對(duì)方發(fā)送內(nèi)容
4.給對(duì)方發(fā)送反饋,此步驟為非必須步驟
Client端流程
1.建立通信的socket
2.發(fā)送內(nèi)容到指定服務(wù)器
3.接受服務(wù)器給定的反饋內(nèi)容
- 服務(wù)器案例v01
- 客戶(hù)端案例v02
- 服務(wù)器程序要求永久運(yùn)行,一般用死循環(huán)處理
- 改造的服務(wù)器版本v03
TCP編程
- 面向連接的傳輸,即每次傳輸之前需要建立一個(gè)連接
- 客戶(hù)端和服務(wù)端兩個(gè)程序需要編寫(xiě)
Server端的編寫(xiě)流程
1.建立Socket負(fù)責(zé)具體通信。這個(gè)socket其實(shí)只負(fù)責(zé)接受對(duì)方的請(qǐng)求
2.綁定端口和地址
3.監(jiān)聽(tīng)接入的訪問(wèn)Socket
4.接受訪問(wèn)的Socket,可以理解接受訪問(wèn)即建立了一個(gè)通訊的鏈路通路
5.接受對(duì)方的發(fā)送內(nèi)容,利用接收到的Socket接受內(nèi)容
6.如果有必要,給對(duì)方發(fā)送反饋信息
7.關(guān)閉鏈路通路
Client端流程
1.建立通信socket
2.鏈接對(duì)方,請(qǐng)求跟對(duì)方建立通路
3.發(fā)送內(nèi)容到對(duì)方服務(wù)器
4.接受對(duì)方的反饋
5.關(guān)閉鏈接通路
Server端:
import socket def tcp_server(): # 1、建立socket負(fù)責(zé)具體通信,這個(gè)和socket其實(shí)只負(fù)責(zé)接受對(duì)方的請(qǐng)求,真通信的是連接后 # socket.AF_INET:使用ipv4協(xié)議 # socket.SOCK_STREAM:使用tcp連接 sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 2、綁定IP以及端口 addr = ("192.168.200.2", 1914) sock.bind(addr) # 3、監(jiān)聽(tīng)接入的訪問(wèn)socket sock.listen() while True: # 4、接受訪問(wèn)的Socket 可以理解接受訪問(wèn)即建立了一個(gè)通訊的連接通路 # accept 返回的元祖第一個(gè)元素賦值給SKT,利用接受到的socket接受內(nèi)容 skt, addr = sock.accept() # 建立通道 # 5、接受對(duì)方發(fā)送的內(nèi)容、利用接受到的socket接受內(nèi)容 # 500 表示接受使用的buffersize # mgs = skt.receive(500) mgs = skt.recv(500) # 接受到的是bytes格式內(nèi)容 # 想得到str格式的,需要進(jìn)行解碼 msg = mgs.decode() print(msg) data = f'我已經(jīng)收到了' # print(data) # 6、如果有必要、給對(duì)方反饋信息 skt.send(data.encode()) skt.close() if __name__ == '__main__': print("tcpstaring......") tcp_server() print("tcpstoping......")
client端
import socket def tcp_client(): a = 0 while a < 100: # 1、建立通信socket sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) addr = ("192.168.200.2", 1914) sock.connect(addr) data = f"{a}你好 我是client,你收到了么?" sock.send(data.encode()) rst = sock.recv(500) print(rst.decode()) sock.close() a+=1 if __name__ == '__main__': tcp_client()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python采用socket模擬TCP通訊的實(shí)現(xiàn)方法
- 詳解python tcp編程
- Python使用socket模塊實(shí)現(xiàn)簡(jiǎn)單tcp通信
- Python 創(chuàng)建TCP服務(wù)器的方法
- python 使用raw socket進(jìn)行TCP SYN掃描實(shí)例
- Python TCPServer 多線程多客戶(hù)端通信的實(shí)現(xiàn)
- python基于TCP實(shí)現(xiàn)的文件下載器功能案例
- python3 tcp的粘包現(xiàn)象和解決辦法解析
- 基于python模擬TCP3次握手連接及發(fā)送數(shù)據(jù)
相關(guān)文章
Python實(shí)現(xiàn)基于Fasttext的商品評(píng)論數(shù)據(jù)分類(lèi)的操作流程
這篇文章主要介紹了Python實(shí)現(xiàn)基于Fasttext的商品評(píng)論數(shù)據(jù)分類(lèi),今天使用的fasttext更像是一個(gè)集成的庫(kù),把向量化和分類(lèi)一起做掉了,這個(gè)對(duì)于使用層面來(lái)講就更方便了一些,需要的朋友可以參考下2022-06-06使用Python串口實(shí)時(shí)顯示數(shù)據(jù)并繪圖的例子
今天小編就為大家分享一篇使用Python串口實(shí)時(shí)顯示數(shù)據(jù)并繪圖的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12利用pandas進(jìn)行數(shù)據(jù)清洗的7種方式
采集到原始的數(shù)據(jù)中會(huì)存在一些噪點(diǎn)數(shù)據(jù),噪點(diǎn)數(shù)據(jù)是對(duì)分析無(wú)意義或者對(duì)分析起到偏執(zhí)作用的數(shù)據(jù),所以這篇文章給大家介紹了利用pandas進(jìn)行數(shù)據(jù)清洗的7種方式,需要的朋友可以參考下2024-03-03django rest framework 數(shù)據(jù)的查找、過(guò)濾、排序的示例
這篇文章主要介紹了 django rest framework 數(shù)據(jù)的查找、過(guò)濾、排序,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06python實(shí)現(xiàn)柵欄加解密 支持密鑰加密
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)柵欄加解密,支持密鑰加密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03如何利用python實(shí)現(xiàn)詞頻統(tǒng)計(jì)功能
詞頻統(tǒng)計(jì)用途很廣泛,比如我們統(tǒng)計(jì)某篇文章中的用詞頻率,網(wǎng)絡(luò)熱點(diǎn)詞匯,再比如起名排行榜呀、熱門(mén)旅游景點(diǎn)排行榜呀什么的,其實(shí)也都可以套用,這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)詞頻統(tǒng)計(jì)功能的相關(guān)資料,需要的朋友可以參考下2021-10-10Python venv虛擬環(huán)境跨設(shè)備遷移的實(shí)現(xiàn)
本文主要介紹了Python venv虛擬環(huán)境跨設(shè)備遷移的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06解決pycharm remote deployment 配置的問(wèn)題
今天小編就為大家分享一篇解決pycharm remote deployment 配置的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06