python是乙個強大的網路程式設計工具。大家都知道,在網路程式設計中的乙個基本主件就是套接字(socket)。套接字到底是什麼呢?可以這樣說,就是兩個程式之間的資訊通道而已。比如兩個人打**,必須建立有線或者無線的道路來進行通訊。程式可能分布在不同的計算機上,兩個人也不一定時時在一起。所以程式與程式之間,要通過套接字相互傳送訊息。
套接字:包括兩個,伺服器套接字,客戶端套接字。建立乙個伺服器套接字後,讓它等待連線。然而伺服器套接字要做的還有就是監聽,必須指定乙個ip位址和乙個埠號,通俗的講,ip位址決定將要通訊的計算機,埠號是該指定通訊的計算機上要通訊的程式。相比來說,客戶端套接字就簡單多了,只是完成簡單的連線工作,完成之後,便斷開連線。
乙個套接字就是乙個socket模組中socket類的例項,它的例項化需要三個引數:第乙個引數是位址族(socket.af_inet);第二個引數是流(socket.sock_stream)或者資料報(socket.sock_dgram);第三個引數是你將要使用的協議,預設情況0即可。伺服器端套接字使用bind繫結位址和埠號,在呼叫listen方法去監聽這個位址和埠號。客戶端套接字使用connect方法連線到將要通訊的ip位址。所謂位址是格式為(host,port)的元組。listen的方法有乙個引數,用來指定允許排隊等待的連線數目。
伺服器端開始監聽,便可以接受連線,次數呼叫accept方法,此法會進入阻塞狀態,直到有客戶端呼叫connect方法,然後該方法返回乙個格式為(client,addres)的元組,client是乙個客戶端套接字,address是乙個位址。等伺服器端處理的方法結束,便呼叫另乙個accept方法等待下乙個連線。通常是在無線迴圈中實現的。
下面舉乙個例子:
伺服器端:
import socket
s=socket.socket()
host=socket.gethostname()
port=1234
s.bind((host,port))
s.listen(5)
while true:
s,addr=s.accept()
print ("got connect from %s:%s" % addr)
s.send("thank you for connecting")
s.close()
客戶端:
import socket
s=socket.socket()
host=socket.gethostname()
port=1234
s.connect((host,port))
print
s.recv(1024)
套接字有兩個方法:send()方法,用於傳送資料,recv()方法,用於接收資料。使用字串引數來呼叫send傳送資料,用乙個所需最大位元組數作引數呼叫recv來接收資料。在linux系統中需要系統管理員的許可權,才能使用1024以下的埠,這些低於1024的埠用於標準服務,比如埠80用於web服務,當你用ctrl+c停止了乙個服務,可能要等上一段時間才能使用同乙個埠號(可能會得到「位址正在使用」的錯誤資訊)
上面的伺服器端程式設計稱為阻塞程式設計。更深入的話可以看看非同步網路程式設計,其中使用了執行緒來同時處理多個客戶機。
python中的socket簡單使用
伺服器端套接字 客戶端套接字 公共用途的套接字函式 服務端我們可以使用 socket 模組的 socket 函式來建立乙個 socket 物件。然後通過呼叫 bind hostname,port 函式來指定服務的埠。接著,呼叫 socket 物件的 accept 方法,等待客戶端的連線,返回 con...
基於python的socket簡單實現
socket被翻譯為 套接字 它是計算機之間進行通訊的一種約定或一種方式。socket的生命週期如下 1.將socket與位址和埠進行繫結 2.開啟服務端,等待連線 3.建立連線 4.傳送和接收資料 5.關閉連線,關閉服務端 簡單來說,就是開啟,建立連線,傳輸資料,關部的過程 具體 如下 與瀏覽器通...
Python 實現簡單的socket通訊
背景 做測試工作時,經常碰到只做上游,或只做下游專案的情況。此時需要自己寫指令碼模擬另一端的資料。本文在此記錄如何實現乙個簡單的socket通訊。client.py import socket import threading import time host 127.0.0.1 post 5000...