首頁 後端開發 Python教學 Python網路程式設計

Python網路程式設計

Nov 01, 2016 pm 01:18 PM
python

認識Socket

socket通常也稱作"套接字",用於描述IP位址和端口,是一個通訊鏈的句柄,應用程式通常透過"套接字"向網路發出請求或應答網路請求。

socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,對於文件用【打開】【讀寫】【關閉】模式來操作。 socket就是該模式的實現,socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉)

socket和file的區別:

file模組是針對某個指定檔案進行【開啟】【讀寫】【關閉】

socket模組是針對伺服器端和客戶端Socket 進行【開啟】【讀寫】【關閉】

Python網路程式設計


yt )實作最簡單的socket通訊

#!/usr/bin/env python
# coding=utf-8
# Author:Majh

import socket

ip_port = ('127.0.0.1', 9999)
sk = socket.socket()

sk.connect(ip_port)
send_data = input('>>').strip()
sk.send(bytes(send_data, encoding='utf-8'))
recv_data = sk.recv(1024)
print(str(recv_data, encoding='utf-8'))
sk.close()

客户端代码
登入後複製
#!/usr/bin/env python
# coding=utf-8
# Author:Majh

import socket

sk = socket.socket()
ip_port = ('127.0.0.1', 9999)

sk.bind(ip_port)
print('sk.bind......')
sk.listen(5)
print('sk.listen......')
conn, addr = sk.accept()
print('conn:', conn)
print('addr:', addr)

read_data = conn.recv(1024)
print('read_data', read_data)
read_data = read_data.upper()

conn.send(read_data)
conn.close()

服务器端代码
登入後複製

socket關鍵字參數: 

 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

參數參數:14㟎<〜4〜

  socket.AF_INET6 IPv6


  socket.AF_UNIX 只能夠用於單一的Unix系統進程間通訊

參數二:型別ock『 .SOCK_DGRAM   資料報式socket , for UDP

  socket.SOCK_RAW 原始套接字,普通的套接字無法處理ICMP、IGMP等網絡報文,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4報文;此外,利用原始套接字,可以透過IP_HDRINCL套接字選項由使用者建構IP頭。

  socket.SOCK_RDM 是一種可靠的UDP形式,即保證交付資料報但不保證順序。 SOCK_RAM用來提供對原始協定的低階訪問,在需要執行某些特殊操作時使用,例如發送ICMP封包。 SOCK_RAM通常僅限於高級使用者或管理員執行的程式使用。

  socket.SOCK_SEQPACKET 可靠的連續資料包服務

參數三:協定


  0  (預設)與特定的位址家族相關的協定,如果是0 ,則系統會根據位址格式和套接類別,自動選擇一個合適的協定

sk.bind(address)

  s.bind(address) 將套接字綁定到位址。 address地址的格式取決於地址族。在AF_INET下,以元組(host,port)的形式表示位址。

sk.listen(backlog)

  開始監聽傳入連線。 backlog指定在拒絕連線之前,可以掛起的最大連線數量。

      backlog等於5,表示核心已經接到了連接請求,但伺服器還沒有呼叫accept進行處理的連接個數最大為5

      這個值不能無限大,因為要在內核中維護連接佇列

sk.setblocking( bool)

  是否阻塞(預設True),如果設定False,那麼accept和recv時一旦無數據,則報錯。

sk.accept()

  接受連接並返回(conn,address),其中conn是新的套接字對象,可以用來接收和發送資料。 address是連接客戶端的位址。

  接收TCP 客戶的連接(阻塞式)等待連接的到來

sk.connect(address)

  連接到address處的套接字。一般,address的格式為元組(hostname,port),如果連線出錯,則回傳socket.error錯誤。

sk.connect_ex(address)

  同上,只不過會有回傳值,連線成功時回傳0 ,連線失敗時候回傳編碼,例如:10061

sk.close()

『 .recv(bufsize[,flag])

  接受套接字的資料。資料以字串形式傳回,bufsize指定最多可以接收的數量。 flag提供有關訊息的其他信息,通常可以忽略。

sk.recvfrom(bufsize[.flag])

  與recv()類似,但回傳值是(data,address)。其中data是包含接收資料的字串,address是發送資料的套接字位址。

sk.send(string[,flag])

  將string中的資料傳送到連接的套接字。傳回值是要傳送的位元組數量,該數量可能小於string的位元組大小。即:可能未將指定內容全部發送。

sk.sendall(string[,flag])

  將string中的資料傳送到連接的套接字,但在返回之前會嘗試傳送所有資料。成功回傳None,失敗則拋出異常。

      內部透過遞歸呼叫send,將所有內容送出。

sk.sendto(string[,flag],address)

  將資料傳送至套接字,address是形式為(ipaddr,port)的元組,指定遠端位址。傳回值是發送的位元組數。此函數主要用於UDP協定。

sk.settimeout(timeout)

  設定套接字操作的超時期,timeout是一個浮點數,單位是秒。值為None表示沒有超時期。一般,超時期應該在剛建立套接字時設置,因為它們可能用於連接的操作(如 client 連接最多等待5s )

sk.getpeername()

  返回連接套接字的遠端位址。傳回值通常是元組(ipaddr,port)。

sk.getsockname()

  傳回套接字自己的位址。通常是一個元組(ipaddr,port)


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

vs code 可以在 Windows 8 中運行嗎 vs code 可以在 Windows 8 中運行嗎 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

visual studio code 可以用於 python 嗎 visual studio code 可以用於 python 嗎 Apr 15, 2025 pm 08:18 PM

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

See all articles