欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Python Socket編程詳解

Python Socket編程詳解

熱門標簽:南京銷售外呼系統軟件 315電話機器人廣告 蓋州市地圖標注 地圖標注的意義點 浙江電銷卡外呼系統好用嗎 地圖制圖標注位置改變是移位嗎 上海機器人外呼系統哪家好 房產電銷外呼系統 地圖標注微信發送位置不顯示

背景

關于Python Socket編程,首先需要了解幾個計算機網絡的知識,通過以下的幾個問題,有助于更好的理解Socket編程的意義,以及整個框架方面的知識:

TCP和UDP協議本質上的區別?

TCP協議,面向連接,可靠,基于字節流的傳輸層通信協議;UDP協議無連接,不可靠,基于數據包的傳輸層協議。

TCP協議在建立連接的過程需要經歷三次握手,斷開連接則需要經歷四次揮手,而這建立連接的過程增加了傳輸過程中的安全性。
而建立連接的過程則會消耗系統的資源,消耗更多的時間,而相比較UDP協議傳輸過程則不會出現這種問題。

總結來講,基于TCP協議傳輸,需要不斷的確認對方是否收到信息,從而建立連接(確認過程次數有限制,即三次握手),UDP協議傳輸則
不需要確認接收端是否收到信息,只需要將信息發給對方。

TCP/IP協議棧、HTTP協議、Socket之間的區別和聯系?

TCP/IP協議棧就是一系列網絡協議,可以分為四層模型來分析:應用層、傳輸層、網絡層、鏈路層;

HTTP協議(超文本傳輸協議)就是在這一協議棧中的應用層協議;HTTP協議簡單來說,它的作用就是規范數據的格式,讓程序能夠方便的識別,并且收發雙方都需要遵循同樣的協議格式進行數據傳輸。(應用層的協議也和HTTP協議的作用類似,不一樣的是定義不同的數據格式。)

Socket可以理解為TCP/IP協議棧提供的對外的操作接口,即應用層通過網絡協議進行通信的接口。Socket可以使用不同的網絡協議進行端對端的通信;

TCP Socket服務器的通信過程?

Server端:

建立連接(socket()函數創建socket描述符、bind()函數綁定特定的監聽地址(ip+port)、listen()函數監聽socket、accept()阻塞等待客戶端連接)

數據交互(read()函數阻塞等待客戶端發送數據、write()函數發送給客戶端數據)

Client端:

建立連接(socket()函數創建socket描述符、connect()函數向指定的監聽地址發送連接請求)

數據交互(wirte()函數發送服務端數據、read()函數足阻塞等待接受服務端發送的數據)

socket和websocket之間的聯系?

webosocket是一種通信協議,不同于HTTP請求,客戶端請求服務端資源,服務端響應的通信過程;websocket允許服務端主動
向客戶端推送消息,同時做到客戶端和服務端雙向通訊的協議。(具體底層原理有待后面實踐,暫時未接觸)

HTTP,WSGI協議的聯系和區別?

HTTP協議(超文本傳輸協議),屬于TCP/IP協議棧中應用層的協議。用于規范傳輸數據的格式,是一種客戶端和服務端傳輸的規則。

WSGI協議則是Python定義的Web服務器和框架程序通信的接口規則。兩者聯系不大,強行說的話,Python框架程序主要處理的是HTTP請求。

(后期可以實現一個WSGI協議的Python框架,用于處理HTTP請求的實驗。)

主流Web框架,異步Web框架?

主流Web框架:Django、Flask

異步Web框架:Tornado(內置異步模塊)、Snaic(Python自帶asyncio)、FastAPI(基于Starlette庫) 、aiohttp(基于asyncio)

asyncio,aiohttp之間的聯系?(異步編程)

asyncio是一個異步IO庫,aiohttp就是基于asyncio的異步HTTP框架(支持客戶端/服務端)

代碼設計

Python提供了基本的socket模塊:

  1. socket模塊;提供了標準的BSD Sockets API;
  2. socketserver模塊:提供了服務器中心類,簡化服務器的開發;

TCP Socket服務端

socket模塊:

# -*- coding: utf-8 -*-
from socket import socket, AF_INET, SOCK_STREAM

def echo_handler(sock ,address):
	print("Get Connection from address:", address)

	while True:
		response = sock.recv(8192)
		if not response:
			break
		print(f"Got {response}")
		sock.sendall(response)

def echo_server(address, back_log=5):
	sock = socket(AF_INET, SOCK_STREAM)
	sock.bind(address)
	sock.listen(back_log)

	while True:
		sock_client, address = sock.accept()
		echo_handler(sock_client, address)

if __name__ == "__main__":
	echo_server(('localhost', 5000))

代碼詳解:

  • 創建一個基于IPV4和TCP協議的Socket,這里AF_INET指的是使用IPV4協議,SOCK_STREAM指定使用面向流的TCP協議,綁定監聽端口,設置等待連接的最大數量
  • 創建一個永久循環,獲取客戶端請求的連接,accept()會等待并返回一個客戶端的連接;
  • 連接建立后,等待客戶端數據,接受完客戶端數據,然后返回數據給客戶端,最后關閉連接

存在的問題:當出現多個客戶端請求時,由于是單個線程會發生阻塞的情況,所以如果需要多線程處理多個客戶端請求,可以這樣改;

from threading import Thread

while True:
        client_sock, address = sock.accept()
        thread = Thread(target=echo_handler, args=(client_sock, address))
        thread.start()

這樣的話,就會在每個客戶端請求的時候,生成一個子線程然后處理請求;
(但是存在一個問題:當突然大量請求連接,消耗系統資源達到上限后,很可能造成程序無法處理后續請求。)

socketserver模塊:

from socketserver import BaseRequestHandler, TCPServer

class EchoHandler(BaseRequestHandler):
    def handle(self):
        print("Got Connection From: %s" % str(self.client_address))
        while True:
            msg = self.request.recv(8192)
            if not msg:
                break
            self.request.send(msg)

if __name__ == "__main__":
    server = TCPServer(("", 5000), EchoHandler)
    server.serve_forever()
from socketserver import StreamRequestHandler, TCPServer, ThreadingTCPServer
import time

class EchoHandler(StreamRequestHandler):
    def handle(self):
        print("Got Connection Address: %s" % str(self.client_address))
        for line in self.rfile:
            print(line)
            self.wfile.write(bytes("hello {}".format(line.decode('utf-8')).encode('utf-8')))

if __name__ == "__main__":
    serv = ThreadingTCPServer(("", 5000), EchoHandler)
    serv.serve_forever()

代碼詳解:

  • 處理多個客戶端,初始化一個ThreadingTCPServer實例;
  • 設置綁定的IP地址和端口,以及處理類;
  • 使用StreamRequestHandler(使用流的請求處理程序類,類似file-like對象,提供標準文件接口簡化通信過程),重寫里面的handle方法,獲取請求數據,返回數據給客戶端;

TCP Socket客戶端

socket模塊:

# -*- coding: utf-8 -*-
from socket import socket, AF_INET, SOCK_STREAM
import time

def request_handler():
	start_time = time.time()
	sock_client = socket(AF_INET, SOCK_STREAM)
	sock_client.connect(('localhost', 5000))
	
	book_content = ""
	with open("send_books.txt", "r") as f:
		book_content = f.read()
	
	content_list = book_content.split("\n")
	for content in content_list:
		if content:
			sock_client.send((content).encode())
			time.sleep(2)
			response = sock_client.recv(8192)
			print(response)

	end_time = time.time()
	print("總共耗時:", end_time-start_time)

		

if __name__ == "__main__":
	request_handler()

UDP Socket

Socket模塊:

from socket import socket, AF_INET, SOCK_DGRAM
import time

def time_server(address):
    sock = socket(AF_INET, SOCK_DGRAM)
    sock.bind(address)

    while True:
        msg, addr = sock.recvfrom(8192)
        print('Get message from', addr)
        resp = time.ctime()
        sock.sendto(resp.encode('ascii'), addr)

if __name__ == "__main__":
    time_server(('', 5000))

代碼不詳解,和之前的差不多,注意不同的協議就完事了

客戶端測試:

from socket import socket, AF_INET, SOCK_DGRAM

if __name__ == "__main__":
    s = socket(AF_INET, SOCK_DGRAM)
    s.sendto(b'hello', ('localhost', 5000))
    text = s.recvfrom(8192)
    print(text)

socketserver模塊:

from socketserver import BaseRequestHandler, UDPServer
import time


class TimeHandler(BaseRequestHandler):
    def handle(self):
        print("Got Connection %s".format(str(self.client_address)))
        data = self.request[0]
        print(data)
        msg, sock = self.request
        print(msg)
        data = time.ctime()
        sock.sendto(data.encode('ascii'), self.client_address)

if __name__ == "__main__":
    u = UDPServer(("localhost", 9999), TimeHandler)
    u.serve_forever()

代碼不在贅述,如果需要多線程處理并發操作可以使用ThreadingUDPServer

總結

關于本篇介紹Python Socket編程,大都是皮毛,只是談到了Python實際處理socket的幾個模塊,
關于socket底層方面的知識并未提及,先了解個大概,從實際使用方面出發,在實際使用過程中結合
計算機網絡知識,能夠對socket在整個TCP/IP協議棧中的作用。

socket和socketserver模塊都可以用來編寫網絡程序,不同的是socketserver省事很多,你可以專注
業務邏輯,不用去理會socket的各種細節,包括不限于多線程/多進程,接收數據,發送數據,通信過程。

以上就是Python Socket編程詳解的詳細內容,更多關于Python Socket編程的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python SOCKET編程基礎入門
  • python Socket網絡編程實現C/S模式和P2P
  • python網絡編程:socketserver的基本使用方法實例分析
  • python網絡編程socket實現服務端、客戶端操作詳解
  • 基于python3的socket聊天編程
  • python socket通信編程實現文件上傳代碼實例
  • Python 網絡編程之TCP客戶端/服務端功能示例【基于socket套接字】
  • Python 網絡編程之UDP發送接收數據功能示例【基于socket套接字】
  • python粘包問題及socket套接字編程詳解

標簽:雙鴨山 陽泉 臨汾 日照 金華 克拉瑪依 貴州 赤峰

巨人網絡通訊聲明:本文標題《Python Socket編程詳解》,本文關鍵詞  Python,Socket,編程,詳解,Python,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python Socket編程詳解》相關的同類信息!
  • 本頁收集關于Python Socket編程詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲激情图片qvod| 日本一卡二卡在线| 九九热视频在线免费观看| 欧美xxxx老人做受| 美洲天堂一区二卡三卡四卡视频 | 久久九九国产精品| 久久激情综合网| wwwwww日本| 日韩一级在线观看| 免费av成人在线| 一级片手机在线观看| 日韩久久久久久| 老司机精品视频导航| 国产亚洲精品熟女国产成人| 久久综合中文字幕| 国产麻豆成人精品| 伊人在线视频观看| 亚洲六月丁香色婷婷综合久久 | 国产精品免费看片| 成人午夜短视频| 色偷偷一区二区三区| 一区二区三区在线免费观看| wwwww在线观看| 91精品国产高清一区二区三区蜜臀| 性感美女极品91精品| 免费中文字幕av| 精品国产精品网麻豆系列| 国产在线精品国自产拍免费| 日本不卡一二区| 亚洲人成影院在线观看| 四虎国产精品免费| 欧美一三区三区四区免费在线看| 日韩av电影一区| 欧美 日韩 成人| 国产精品女上位| 91浏览器打开| 日韩一区二区三区免费看| 久国产精品韩国三级视频| 99热这里只有精品4| 亚洲人被黑人高潮完整版| 国产精品果冻传媒| 久久综合久久综合久久综合| 成人av动漫在线| 51精品久久久久久久蜜臀| 老司机精品视频线观看86| www.xxxx日本| 亚洲午夜久久久久久久久久久 | 麻豆高清免费国产一区| 免费一级suv好看的国产网站| 成人免费在线视频| 中文字幕第3页| 国产日韩欧美高清| 91麻豆精品在线观看| 日韩美女一区二区三区| 成人黄动漫网站免费app| 7777女厕盗摄久久久| 国产一区二区在线视频| 91国产成人在线| 日韩电影免费在线| 亚洲最大的黄色网址| 午夜久久久久久久久久一区二区| 久久久精品成人| 一区二区三区美女| 色一情一交一乱一区二区三区 | 不卡一区二区中文字幕| 91精品视频网| 懂色av一区二区在线播放| 欧美男生操女生| 国产成人综合在线播放| 7878成人国产在线观看| 国产传媒欧美日韩成人| 4438亚洲最大| 成人国产免费视频| 精品欧美一区二区久久| 91在线无精精品入口| 久久久亚洲欧洲日产国码αv| 人妻巨大乳一二三区| 国产日韩精品一区二区三区| 亚洲av成人精品一区二区三区| 国产精品拍天天在线| 成人免费网站黄| 亚洲制服丝袜在线| 亚洲伦理一区二区三区| 美女精品一区二区| 欧美精品色一区二区三区| 成人毛片老司机大片| 欧美精品一区二区三区蜜臀| 苍井空张开腿实干12次| 国产精品蜜臀在线观看| 亚洲精品成人无码| 午夜视频久久久久久| 色婷婷综合久久久久中文 | www.亚洲色图.com| 久久亚洲一级片| 一级特级黄色片| 一区二区三区日韩精品| 国产午夜精品理论片| 麻豆成人免费电影| 这里只有精品视频在线观看| 91碰在线视频| 中文字幕一区二区三区不卡在线| 免费看的黄色网| 欧美aaa在线| 欧美精品aⅴ在线视频| 91天堂素人约啪| 国产精品麻豆欧美日韩ww| 久久久免费看片| 久久精品国产秦先生| 欧美一二三区在线观看| 久久久精品人妻一区二区三区| 亚洲欧美激情一区二区| 国产女人18水真多毛片18精品| 国产一区二区调教| 久久亚洲一区二区三区四区| 亚洲综合色一区| 美女视频黄免费的久久| 欧美一区二区三区成人| 艳妇乳肉豪妇荡乳xxx| 亚洲大片一区二区三区| 欧美日韩久久久一区| 日本成人在线免费| 亚洲精品国产品国语在线app| 色婷婷综合久久久中文一区二区| 成人成人成人在线视频| 国产精品久久网站| 国精产品久拍自产在线网站| 国产成人啪午夜精品网站男同| 国产欧美一区二区三区在线看蜜臀| 人妻熟人中文字幕一区二区| 国产在线看一区| 欧美韩国日本一区| 看免费黄色录像| 99久久综合精品| 亚洲精品成人少妇| 欧美视频第二页| 国产精品国产自产拍在线| 亚洲图片第一页| 国产大陆亚洲精品国产| 中文字幕一区二区三区视频| 91极品视觉盛宴| 可以看的av网址| 视频一区二区三区中文字幕| 日韩一区二区视频在线观看| 尤物视频最新网址| 国产电影精品久久禁18| 亚洲欧美怡红院| 欧美视频在线一区| 日韩精品人妻中文字幕有码| 青青草91视频| 久久精品视频网| 欧美日韩午夜视频| 99国产精品免费视频| 日韩高清不卡一区| www国产精品av| 1024手机在线视频| 男人添女人荫蒂国产| 美女www一区二区| 欧美国产精品久久| 欧美伊人久久久久久午夜久久久久| 国产成人精品一区二区三区在线观看| 婷婷成人综合网| 国产丝袜美腿一区二区三区| 91福利视频网站| 屁屁影院国产第一页| 国产一区二区视频在线| 亚洲免费大片在线观看| 欧美一区二区私人影院日本| 99在线视频免费| 久久综合桃花网| 免费一级片91| 国产精品久久精品日日| 欧美精品黑人性xxxx| 天天操天天干天天操天天干| 91在线porny国产在线看| 日本伊人色综合网| 国产精品视频一二三区| 51精品国自产在线| 亚洲欧美卡通动漫| 国产免费a级片| 国产在线不卡一区| 夜夜爽夜夜爽精品视频| 亚洲精品在线电影| 在线亚洲高清视频| 日本一级免费视频| 在线观看欧美一区二区| 精品一区二区三区影院在线午夜| 综合久久综合久久| 欧美r级在线观看| 色哟哟精品一区| 手机看片福利视频| 国产精品99精品无码视亚| 国产美女视频一区| 亚洲成a人v欧美综合天堂| 欧美国产精品一区二区三区| 91麻豆精品国产| 色综合天天综合狠狠| 国产伦精品一区二区三区视频女| 能看毛片的网站| 国产精品一区2区| 日韩 欧美一区二区三区|