python之socket初識的簡單介紹

本文目錄一覽:

怎麼理解 Python 中的 socket 工作原理

沒有區別。首先都是用socket類中的成員函數socket創建一個socket對象,這個對象有一個句柄(socket.socket的返回值,也可以理解為套接字文件指針),在socket類中有數據AF_INET成員和SOCK_STREAM成員,所以第一種形式實際上是將socket對象自身的

python中如何去學習那些socket

這個星期剛剛用Python寫了幾個 ping,dns(UDP 53)掃描以及tcp端口掃描的程序,總結有以下幾點:

1. 多線程,一個線程負責發,一個線程負責收

2. 使用raw socket,需要有root權限,其中ICMP的raw socket需要設置參數告訴kernel IP頭有你的程序添加。我在check sum這裡卡了點時間,手裡最好有本網絡參考書,《TCP/IP illustrated》最好,在寫代碼之前必須對報文格式以及各字段做到心中有數。

3. 看看Python的struct/array文檔看看怎麼組包,解包

4. 除非你異常牛逼,否則還是需要debug工具,比如wireshark/tcpdump等工具配合讓你看看自己發出來的包那裡出了問題。如果用GUI的wireshark記得將option中的tcp/ip部分checksum option打開

把代碼貼給你就讓你失去自己動手的樂趣了!呵呵have fun!

python怎樣建立socket服務器

下面的例子是多線程實現的socket服務器:

import socketimport threadingclass ThreadedServer(object):

def __init__(self, host, port):

self.host = host

self.port = port

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

self.sock.bind((self.host, self.port))

def listen(self):

self.sock.listen(5)

while True:

client, address = self.sock.accept()

client.settimeout(60)

threading.Thread(target = self.listenToClient,args = (client,address)).start()

def listenToClient(self, client, address):

size = 1024

while True:

try:

data = client.recv(size)

if data:

# Set the response to echo back the recieved data

response = data

client.send(response)

else:

raise error(‘Client disconnected’)

except:

client.close()

return Falseif __name__ == “__main__”:

while True:

port_num = input(“Port? “)

try:

port_num = int(port_num)

break

except ValueError:

pass

ThreadedServer(”,port_num).listen()

Python 之 Socket編程(TCP/UDP)

socket(family,type[,protocal]) 使用給定的地址族、套接字類型、協議編號(默認為0)來創建套接字。

有效的端口號: 0~ 65535

但是小於1024的端口號基本上都預留給了操作系統

POSIX兼容系統(如Linux、Mac OS X等),在/etc/services文件中找到這些預留端口與的列表

面向連接的通信提供序列化、可靠的和不重複的數據交付,而沒有記錄邊界。意味着每條消息都可以拆分多個片段,並且每個消息片段都能到達目的地,然後將它們按順序組合在一起,最後將完整的信息傳遞給等待的應用程序。

實現方式(TCP):

傳輸控制協議(TCP), 創建TCP必須使用SOCK_STREAM作為套接字類型

因為這些套接字(AF_INET)的網絡版本使用互聯網協議(IP)來搜尋網絡中的IP,

所以整個系統通常結合這兩種協議(TCP/IP)來進行網絡間數據通信。

數據報類型的套接字, 即在通信開始之前並不需要建議連接,當然也無法保證它的順序性、可靠性或重複性

實現方式(UDP)

用戶數據包協議(UDP), 創建UDP必須使用SOCK_DGRAM (datagram)作為套接字類型

它也使用互聯網來尋找網絡中主機,所以是UDP和IP的組合名字UDP/IP

注意點:

1)TCP發送數據時,已建立好TCP連接,所以不需要指定地址。UDP是面向無連接的,每次發送要指定是發給誰。

2)服務端與客戶端不能直接發送列表,元組,字典。需要字符串化repr(data)。

TCP的優點: 可靠,穩定 TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。

TCP的缺點: 慢,效率低,佔用系統資源高,易被攻擊 TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台設備上維護所有的傳輸連接,事實上,每個連接都會佔用系統的CPU、內存等硬件資源。 而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。

什麼時候應該使用TCP : 當對網絡通訊質量有要求的時候,比如:整個數據要準確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。 在日常生活中,常見使用TCP協議的應用如下: 瀏覽器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件傳輸.

UDP的優點: 快,比TCP稍安全 UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊……

UDP的缺點: 不可靠,不穩定 因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網絡質量不好,就會很容易丟包。

什麼時候應該使用UDP: 當對網絡通訊質量要求不高的時候,要求網絡通訊速度能盡量的快,這時就可以使用UDP。 比如,日常生活中,常見使用UDP協議的應用如下: QQ語音 QQ視頻 TFTP ……

python怎麼建立socket服務端

方法/步驟

1

首先先建立一個python文件,命名為 socket_server1.py

2

下面是相關的步驟圖.(圖片來源python官方資料參考)

3

先導入相關的模塊.並且定義相關的主機及端口.(相關參數可以參考下圖)

4

完整的socket_server1.py文件.

5

設置好之後,通過命令提示符測試(進行測試.開始—–運行—–cmd)

6

先使用python 運行下剛剛的那個文件. python socket_server1.py

7

客戶端直接使用telnet代替測試一下.telnet 127.0.0.1 10086

8

然後在服務端的窗口上面會出現相關的客戶端信息,在客戶端的窗口上面,輸入一個字符,服務器端會顯示出來,並且客戶端上面會返回一個大寫的字符。

9

這個就是一個簡單的 python的socket的服務器端了。只是測試,沒有排錯日誌

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/183772.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-25 05:52
下一篇 2024-11-25 05:52

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論