欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 套接字 Accept 超時問題解析

 更新時間:2023年06月08日 09:32:31   作者:跡憶客  
本文討論了 Python 中套接字的超時功能,該功能對于緩解無限期等待套接字接受的問題是必要的,下面通過本文給大家大家介紹Python 套接字 Accept 超時問題,需要的朋友可以參考下

套接字是網(wǎng)絡(luò)通信的基本構(gòu)建塊。 每當兩個網(wǎng)絡(luò)實體需要傳輸數(shù)據(jù)時,就會打開一個套接字。

這些套接字在會話期間保持連接。 但有時,在 Python 中使用套接字時,您可能會等待很長時間,而另一端仍然接受套接字連接。

本文討論了 Python 中套接字的超時功能,該功能對于緩解無限期等待套接字接受的問題是必要的。

套接字接受、拒絕和超時

每當您嘗試使用 Python 腳本建立與服務(wù)器的連接時,您都需要打開一個套接字連接。 此套接字連接充當在客戶端和服務(wù)器之間傳輸數(shù)據(jù)的隧道。

在打開socket的過程中,有三種場景。

  • Socket Accept:當socket打開成功,此時服務(wù)端和客戶端已經(jīng)建立連接,可以收發(fā)數(shù)據(jù),我們稱之為socket accept。 這個場景就是打開一個socket的最終目的。Socket reject:假設(shè)您打開了一個套接字但傳遞了一些不同的參數(shù),忘記傳遞參數(shù)或沒有正確遵循打開套接字的過程; 你會得到拒絕。 這意味著無法建立發(fā)送和接收數(shù)據(jù)的連接。Socket Accept 超時:這是一個重要但被忽視的場景。 有時當您嘗試打開一個套接字時,您可能不會從另一端得到任何響應(yīng)。
  • 因此,您將永遠等待。 這是一種不受歡迎的情況,因為您想關(guān)閉當前請求并嘗試另一個請求,而不是永遠等待。
  • 超時選項允許您設(shè)置最長等待時間以使您的請求被另一方接受。 超過時間限制后,將引發(fā)錯誤。

套接字方法及其在 Python 中的使用

Python 有一個名為 socket 的內(nèi)置庫,您需要導(dǎo)入它才能使用套接字連接。 讓我們看看套接字庫的一些重要方法。

  • accept():顧名思義,accept() 方法接受來自另一方的傳入套接字請求。 此方法返回一個套接字連接,您可以使用它在連接的實體之間傳輸數(shù)據(jù)。bind():此方法將套接字連接綁定或附加到地址。 如果您想使用套接字,則必須調(diào)用此方法。
  • bind() 方法接受一個 IP 地址元組和它綁定套接字的端口。
  • listen():這是一個服務(wù)器端方法,它使服務(wù)器能夠接受套接字以在連接之間傳輸數(shù)據(jù)。
  • connect():此方法接受一個地址作為參數(shù)。 然后它在該地址連接遠程套接字。
  • settimeout():此方法接受一個非零數(shù)字作為引發(fā) TimeoutError 之前等待的秒數(shù)。 此方法對于緩解無限等待時間的問題很重要。
  • setdefaulttimeout():如果您使用多個套接字連接并希望為每個連接設(shè)置相同的超時限制,那么這是您的首選方法。 它接受秒數(shù)作為參數(shù),并將其作為等待超時限制應(yīng)用于所有新的套接字連接。

Python 中的套接字接受超時示例

讓我們在 Python 代碼的幫助下看一個套接字接受超時的例子。 對于此示例,我們需要編寫兩個 Python 腳本,一個用于服務(wù)器,另一個用于客戶端。

我們將看到三種不同的場景,如下所述。

  • 第一種情況是沒有設(shè)置超時限制。 在這種情況下,客戶將繼續(xù)等待。

請注意,根據(jù)您的操作系統(tǒng),請求可能會在一段時間后自動拒絕。

  • 第二種情況是我們使用 settimeout() 方法設(shè)置超時限制。 在這種情況下,您將在設(shè)置的限制后得到 TimeoutError。
  • 在第三種情況下,我們將使用 setdefaulttimeout() 方法來設(shè)置超時限制。

下面我們一一看看上面三種情況的代碼。

未設(shè)置超時限制時 Python 中的套接字接受超時

服務(wù)器端腳本:

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
     s.bind(('', 1717))

客戶端腳本

import socket
 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
     s.connect(('127.0.0.1', 1717))

您在服務(wù)器端看不到 listen() 方法。 因此,服務(wù)器沒有響應(yīng),客戶端正在等待。

設(shè)置超時時Python中的套接字接受超時

在這種情況下,您會看到客戶端在超過超時時間后中止操作并引發(fā) TimeoutError。

服務(wù)器端:

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(('', 1717))

客戶端腳本

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
     s.settimeout(3)
     s.connect(('127.0.0.1', 1717))

在這種情況下,會引發(fā) Python 套接字 TimeoutError。 請注意,套接字的行為可能因平臺而異。

在 Linux 機器上,套接字拋出 ConnectionRefusedError: [Errno 111] Connection refused 錯誤,直到您不接受服務(wù)器端的套接字。

在 Python 中為每個套接字設(shè)置默認超時

此方法將為所有新套接字設(shè)置相同的默認超時。 這樣,您可以通過為每個套接字單獨設(shè)置超時來節(jié)省時間和麻煩。

服務(wù)器端:

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(('', 1717))

客戶端:

import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    socket.setdefaulttimeout(3)
    s.connect(('127.0.0.1', 1717))

請注意 ,對于 setdefaulttimeout() ,您必須直接使用套接字類而不是對象,因為它為所有線程設(shè)置超時。

總結(jié)

套接字超時是 Python 套接字編程的一個重要方面。 如果您不處理超時,您可能會讓您的客戶端永遠等待套接字。

或者在其他情況下,根據(jù)您的環(huán)境實現(xiàn),它可能會引發(fā)錯誤。

到此這篇關(guān)于Python 套接字 Accept 超時的文章就介紹到這了,更多相關(guān)Python 套接字Accept 超時內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python數(shù)據(jù)結(jié)構(gòu)的排序算法

    python數(shù)據(jù)結(jié)構(gòu)的排序算法

    下面是是對python數(shù)據(jù)結(jié)構(gòu)的排序算法的一些講解及示意圖,感興趣的小伙伴一起來學(xué)習(xí)吧
    2021-08-08
  • python字符串連接方式匯總

    python字符串連接方式匯總

    這篇文章主要介紹了python字符串連接方式匯總,很實用的基礎(chǔ)技巧匯總,需要的朋友可以參考下
    2014-08-08
  • python3使用python-redis-lock解決并發(fā)計算問題

    python3使用python-redis-lock解決并發(fā)計算問題

    本文主要介紹了python3使用python-redis-lock解決并發(fā)計算問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 利用pycharm調(diào)試ssh遠程程序并實時同步文件的操作方法

    利用pycharm調(diào)試ssh遠程程序并實時同步文件的操作方法

    這篇文章主要介紹了利用pycharm調(diào)試ssh遠程程序并實時同步文件的操作方法,本篇文章提供了利用pycharm遠程調(diào)試程序的方法,且使用的編譯器可以是服務(wù)器中的虛擬環(huán)境的編譯器,可以實時同步本地與服務(wù)器的文件內(nèi)容,需要的朋友可以參考下
    2022-11-11
  • Python如何讀取文件中圖片格式

    Python如何讀取文件中圖片格式

    這篇文章主要介紹了Python如何讀取文件中圖片格式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Python實現(xiàn)獲取系統(tǒng)臨時目錄及臨時文件的方法示例

    Python實現(xiàn)獲取系統(tǒng)臨時目錄及臨時文件的方法示例

    這篇文章主要介紹了Python實現(xiàn)獲取系統(tǒng)臨時目錄及臨時文件的方法,結(jié)合實例形式分析了Python文件與目錄操作相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下
    2019-06-06
  • 使用Pyinstaller打包exe文件詳細圖文教程

    使用Pyinstaller打包exe文件詳細圖文教程

    PyInstaller可以用來打包python應(yīng)用程序,打包完的程序就可以在沒有安裝Python解釋器的機器上運行了,下面這篇文章主要給大家介紹了關(guān)于使用Pyinstaller打包exe文件的詳細圖文教程,需要的朋友可以參考下
    2022-08-08
  • tensorflow 實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換

    tensorflow 實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換

    今天小編就為大家分享一篇tensorflow 實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 使用VLC實現(xiàn)自動播放視頻的操作方法

    使用VLC實現(xiàn)自動播放視頻的操作方法

    VLC是一款開源的多媒體播放器,它支持大量的視頻和音頻格式,并且具有強大的腳本和編程接口,這篇文章主要介紹了使用VLC實現(xiàn)自動播放視頻,需要的朋友可以參考下
    2024-03-03
  • Python中Scrapy爬蟲圖片處理詳解

    Python中Scrapy爬蟲圖片處理詳解

    這篇文章主要介紹了Python中Scrapy爬蟲圖片處理方式和原理,需要的朋友學(xué)習(xí)參考下吧。
    2017-11-11

最新評論