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
- 客戶端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
- 客戶端案例v02
- 服務(wù)器程序要求永久運(yùn)行,一般用死循環(huán)處理
- 改造的服務(wù)器版本v03
TCP編程
- 面向連接的傳輸,即每次傳輸之前需要建立一個(gè)連接
- 客戶端和服務(wù)端兩個(gè)程序需要編寫
Server端的編寫流程
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 多線程多客戶端通信的實(shí)現(xiàn)
- python基于TCP實(shí)現(xiàn)的文件下載器功能案例
- python3 tcp的粘包現(xiàn)象和解決辦法解析
- 基于python模擬TCP3次握手連接及發(fā)送數(shù)據(jù)
相關(guān)文章
python elasticsearch環(huán)境搭建詳解
在本篇文章里小編給大家整理的是關(guān)于python elasticsearch環(huán)境搭建的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。2019-09-09
python dataframe astype 字段類型轉(zhuǎn)換方法
下面小編就為大家分享一篇python dataframe astype 字段類型轉(zhuǎn)換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
python+splinter實(shí)現(xiàn)12306網(wǎng)站刷票并自動(dòng)購(gòu)票流程
這篇文章主要為大家詳細(xì)介紹了python+splinter實(shí)現(xiàn)12306網(wǎng)站刷票并自動(dòng)購(gòu)票流程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
python使用paramiko模塊實(shí)現(xiàn)ssh遠(yuǎn)程登陸上傳文件并執(zhí)行
使用paramiko,ssh遠(yuǎn)程登陸,長(zhǎng)傳文件并執(zhí)行。其中用到了多線程和隊(duì)列,paramiko是用python語(yǔ)言寫的一個(gè)模塊,遵循SSH2協(xié)議,支持以加密和認(rèn)證的方式,進(jìn)行遠(yuǎn)程服務(wù)器的連接。2014-01-01
python人工智能自定義求導(dǎo)tf_diffs詳解
這篇文章主要為大家介紹了python人工智能自定義求導(dǎo)tf_diffs詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Pandas中兩個(gè)dataframe的交集和差集的示例代碼
這篇文章主要介紹了Pandas中兩個(gè)dataframe的交集和差集的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python單鏈表實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了python單鏈表實(shí)現(xiàn)代碼,大家參考使用吧2013-11-11
Python3使用matplotlib繪圖時(shí),坐標(biāo)軸刻度不從X軸、y軸兩端開(kāi)始
這篇文章主要介紹了Python3使用matplotlib繪圖時(shí),坐標(biāo)軸刻度不從X軸、y軸兩端開(kāi)始問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
PyCharm中關(guān)于安裝第三方包的三個(gè)建議
這篇文章主要介紹了PyCharm中關(guān)于安裝第三方包的三個(gè)建議,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

