Socket的英文原義是「孔」或「插座」。作為BSD UNIX的進程通訊機制,通常也稱為"套接字",用於描述IP位址和端口,是一個通訊鏈的句柄,可以用來實現不同虛擬機或不同電腦之間的通訊。
網路上的兩個程式透過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。
建立網路通訊連線至少要一對埠號(socket)。 socket本質是程式介面(API),對TCP/IP的封裝,TCP/IP也要提供可供程式設計師做網路開發所用的接口,這就是Socket程式介面;HTTP是轎車,提供了封裝或顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力。
下面來說一下python的socket。
1.socket模組
要使用socket.socket()函數來建立套接字。其語法如下:
socket.socket(socket_family,socket_type,protocol=0)
socket_family可以是以下參數:
socket.AF_INET-#4(預設)
# socket.AF_INET6 IPv6 socket.AF_UNIX 只能夠用於單一的Unix系統進程間通訊socket_type可以是以下參數: 流式串流. socket , for TCP (預設) socket.SOCK_DGRAM 資料報式socket , for UDP socket.SOCK_RAW 原始套接字,普通的套接字等網路封包文,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4報文;此外,利用原始套接字,可以透過IP_HDRINCL套接字選項由使用者建構IP頭。 socket.SOCK_RDM 是一種可靠的UDP形式,即保證交付資料封包但不保證順序。 SOCK_RAM用來提供對原始協定的低階訪問,在需要執行某些特殊操作時使用,例如發送ICMP封包。 SOCK_RAM通常僅限於高級使用者或管理員執行的程式使用。 socket.SOCK_SEQPACKET 可靠的連續資料包服務protocol參數: 0 (預設)與特定的位址家族相關的協定,如果是0 ,則系統就會根據位址格式和套接類別,自動選擇一個適當的協定2.套接字物件內建方法伺服器端套接字函數#s. bind() 綁定位址(ip位址,連接埠)到套接字,參數必須是元組的格式例如:s.bind(('127.0.0.1',8009))#s.listen( 5) 開始監聽,5為最大掛起的連接數s.accept() 被動接受客戶端連接,阻塞,等待連接客戶端套接字函數s.connect() 連接伺服器端,參數必須是元組格式例如:s.connect(('127,0.0.1',8009))#公共用途的套接字函數s.recv(1024) 接收TCP數據,1024為一次數據接收的大小s.send(bytes) 發送TCP數據,python3發送數據的格式必須為bytes格式s.sendall() 完整傳送數據,內部循環呼叫sends.close() 關閉套接字實例1.簡單實作socket程式#server端#!/usr/bin/env python # _*_ coding:utf-8 _*_ import socket import time IP_PORT = ('127.0.0.1',8009) BUF_SIZE = 1024 tcp_server = socket.socket() tcp_server.bind(IP_PORT) tcp_server.listen(5) while True: print("waiting for connection...") conn,addr = tcp_server.accept() print("...connected from:",addr) while True: data = tcp_server.recv(BUF_SIZE) if not data:break tcp_server.send('[%s] %s'%(time.ctime(),data)) tcp_server.close()以上程式碼解釋:1~4行第一行是Unix的啟動資訊行,隨後導入time模組和socket模組5~10行IP_PORT為全域變數聲明了IP位址和端口,表示bind()函數綁定在此位址上,把緩衝區的大小設定為1K,listen()函數表示最多允許多少個連線同時進來,後來的就會被拒絕掉11~到最後一行#在進入伺服器的循環後,被動等待連線的到來。當有連線時,進入對話循環,等待客戶端發送資料。如果訊息為空,表示客戶端已經退出,就跳出循環等待下一個連線到來。得到客戶端訊息後,在訊息前面加一個時間戳然後返回。最後一行不會執行,因為迴圈不會退出所以服務端也不會執行close()。只是提醒不要忘記呼叫close()函數。 client端
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import socket HOST = '127.0.0.1' PORT = 8009 BUF_SIZE = 1024 ADDR = (HOST,PORT) client = socket.socket() client.connect(ADDR) while True: data = input(">>> ") if not data:break client.send(bytes(data,encoding='utf-8')) recv_data = client.recv(BUF_SIZE) if not recv_data:break print(recv_data.decode()) client.close()5~11行HOST與PORT變數表示伺服器的IP位址與連接埠號碼。由於示範是在同一台伺服器所以IP位址都是127.0.0.1,如果運作在其他伺服器上要做對應的修改。連接埠號碼要與伺服器端完全相同否則無法通訊。緩衝區大小還是1K。 客戶端套接字在10行創建然後就去連接伺服器端13~21行客戶端也無限循環,客戶端的循環在以下兩個條件的任一發生後就退出:1.使用者輸入為空的情況或伺服器端回應的訊息為空。否則客戶端會把使用者輸入的字串傳送給伺服器處理,然後接收顯示伺服器回傳的帶有時間戳記的字串。 執行客戶端程式與服務端程式以下是客戶端的輸入與輸出
[root@pythontab]# python client.py >>> hello python [Thu Sep 15 22:29:12 2016] b'hello python'以下是服務端輸出
[root@pythontab]# python server.py waiting for connection... ...connected from: ('127.0.0.1', 55378)3.socketserver模組socketserver是標準函式庫中的一個高階的模組。用於簡化實作網路客戶端與伺服器所需的大量樣板程式碼。模組中已經實作了一些可以使用的類別。 實例1:使用socketserver實作與上面socket()實例一樣的功能
服务端程序代码
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import socketserver import time HOST = '127.0.0.1' PORT = 8009 ADDR = (HOST,PORT) BUF_SIZE = 1024 class Myserver(socketserver.BaseRequestHandler): def handle(self): while True: print("...connected from:",self.client_address) data = self.request.recv(BUF_SIZE) if not data:break self.request.send(bytes("%s %s"%(time.ctime(),data))) server = socketserver.ThreadingTCPServer(ADDR,Myserver) print("waiting for connection...") server.serve_forever()
11~17行
主要的工作在这里。从socketserver的BaseRequestHandler类中派生出一个子类,并重写handle()函数。
在有客户端发进来的消息的时候,handle()函数就会被调用。
19~21行
代码的最后一部分用给定的IP地址和端口加上自定义处理请求的类(Myserver)。然后进入等待客户端请求与处理客户端请求的无限循环中。
客户端程序代码
import socket HOST = '127.0.0.1' PORT = 8009 ADDR = (HOST,PORT) BUF_SIZE = 1024 client = socket.socket() client.connect(ADDR) while True: data = input(">>> ") if not data:continue client.send(bytes(data,encoding='utf-8')) recv_data = client.recv(BUF_SIZE) if not recv_data:break print(recv_data.decode()) client.close()
执行服务端和客户端代码
下面是客户端输出
[root@pythontab]# python socketclient.py >>> hello python Thu Sep 15 23:53:31 2016 b'hello python' >>> hello pythontab Thu Sep 15 23:53:49 2016 b'hello pythontab'
下面是服务端输出
[root@pythontab]# python socketserver.py waiting for connection... ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385)
以上是python中socket模組詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

每天學習Python兩個小時是否足夠?這取決於你的目標和學習方法。 1)制定清晰的學習計劃,2)選擇合適的學習資源和方法,3)動手實踐和復習鞏固,可以在這段時間內逐步掌握Python的基本知識和高級功能。

Python在Web開發中的關鍵應用包括使用Django和Flask框架、API開發、數據分析與可視化、機器學習與AI、以及性能優化。 1.Django和Flask框架:Django適合快速開發複雜應用,Flask適用於小型或高度自定義項目。 2.API開發:使用Flask或DjangoRESTFramework構建RESTfulAPI。 3.數據分析與可視化:利用Python處理數據並通過Web界面展示。 4.機器學習與AI:Python用於構建智能Web應用。 5.性能優化:通過異步編程、緩存和代碼優

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。

Python在現實世界中的應用包括數據分析、Web開發、人工智能和自動化。 1)在數據分析中,Python使用Pandas和Matplotlib處理和可視化數據。 2)Web開發中,Django和Flask框架簡化了Web應用的創建。 3)人工智能領域,TensorFlow和PyTorch用於構建和訓練模型。 4)自動化方面,Python腳本可用於復製文件等任務。

Python在數據科學、Web開發和自動化腳本領域廣泛應用。 1)在數據科學中,Python通過NumPy、Pandas等庫簡化數據處理和分析。 2)在Web開發中,Django和Flask框架使開發者能快速構建應用。 3)在自動化腳本中,Python的簡潔性和標準庫使其成為理想選擇。

Python的靈活性體現在多範式支持和動態類型系統,易用性則源於語法簡潔和豐富的標準庫。 1.靈活性:支持面向對象、函數式和過程式編程,動態類型系統提高開發效率。 2.易用性:語法接近自然語言,標準庫涵蓋廣泛功能,簡化開發過程。

Python因其簡潔與強大而備受青睞,適用於從初學者到高級開發者的各種需求。其多功能性體現在:1)易學易用,語法簡單;2)豐富的庫和框架,如NumPy、Pandas等;3)跨平台支持,可在多種操作系統上運行;4)適合腳本和自動化任務,提升工作效率。

可以,在每天花費兩個小時的時間內學會Python。 1.制定合理的學習計劃,2.選擇合適的學習資源,3.通過實踐鞏固所學知識,這些步驟能幫助你在短時間內掌握Python。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版