socket
socket通常也稱作"套接字",用於描述ip位址和埠,應用程式通常通過"套接字"向網路發出請求或者應答網路請求,可以認為是一種計算機網路的資料結構,介面。它是網路程式設計的基礎
套接字還分為面向連線的和無連線的:
第一種是指tcp型別套接字,在通訊前需要建立連線,這種連線是較為可靠的,使用的套接字型別是sock_stream,tcp傳輸控制協議,經常和ip協議一起使用,稱為tcp/ip協議
第二種主要指udp型別的套接字,無需連線就可以進行通訊,所有速度較快,但是可靠性不高。而且資料是整個傳送,不會分成小塊。使用的套接字型別是sock_dgram,udp協議通常也與ip協議一起使用
python中的socket模組
使用套接字的基本步驟:
建立套接字
socket(socket_family, socket_type, protocol)
#socket_family 就是指套接字家族可以是af_vnix或af_inet
#socket_type 就是指套接字型別,即sock_stream或sock_dgram
#protocol 是協議,預設為0,一般不填
建立tcp/ip或者udp/ip套接字建立tcp/ip套接字
import socket
tcp = socket.socket(af_inet, sock_stream)
建立udp/ip套接字
import socket
ucp = socket.socket(af_inet, sock_dgram)
套接字的常用函式
函式名描述
伺服器套接字
bind((hostname, port))
繫結位址(注意這裡是元祖)到套接字
listen()
開啟tcp監聽
accept()
被動接受客戶端的連線(阻塞)
客戶端套接字
connect((hostname, port))
初始化tcp伺服器連線
connect_ex()
connect()的擴充套件版本,出錯時返回錯誤碼,而不是異常
公用的套接字
recv()
接收tcp的資料
send()
傳送tcp資料
sendall()
傳送完整的tcp資料
recvfrom()
接收udp資料
sendto()
發生udp資料,因為沒有連線,所以這裡要指定傳送的目標
getpeername()
連線到當前套接字的遠端位址
getsockname()
當前socket位址
getsockopt()
獲得套接字的引數
setsockopt()
設定套接字的引數
close()
關閉套接字
面向模組的套接字函式
setblocking()
設定套接字是否是阻塞模式
settimeout()
設定阻塞套接字操作的超時時間
gettimeout()
得到阻塞套接字操作的超時時間
面向檔案的套接字函式
fileno()
套接字的檔案描述符
makefile()
建立乙個與套接字關聯的檔案物件
建立乙個tcp伺服器和客戶端
建立tcp伺服器的基本步驟
建立套接字並繫結位址
開始監聽連線
接收鏈結並傳送資料
關閉套接字
**如下:
import socket
host = '' #空字串標示127.0.0.1
port = 3214
sk = socket.socket() # 預設使用ipv4和tcp
sk.bind((host,port))
sk.listen(5)
cli, addr = sk.accept() # 等待連線(阻塞式),在連線到來之前會阻塞在這裡
print "client addr:", addr
while true:
data = cli.recv(1024)
if not data:
break
print "recieve data:", data.decode('utf-8')
cli.send(data)
cli.close()
建立tcp客戶端的基本步驟
建立套接字,連線伺服器
收發資料
關閉套接字
import socket
host = '127.0.0.1'
port = 3214
sk = socket.socket()
try:
sk.connect((host, port))
data = "hello"
while data:
sk.sendall(data)
data = sk.recv(1024)
print "recv data:", data
data = raw_input('please input message\n')
except socket.error as err:
print err
finally:
sk.close()
這裡的客戶端僅僅可以用來傳送訊息給服務端,而服務端會接收訊息然後重新傳送回客戶端
建立udp伺服器和客戶端
建立udp服務端的基本步驟
建立套接字並繫結位址
開始監聽連線
收發資料
關閉套接字
import socket
host = ''
port = 3214
sk = socket.socket(socket.af_inet, socket.sock_dgram)
sk.bind((host, port))
data = true
while data:
data, addr = sk.recvfrom(1024)
if data == b'bye':
break
print "recieve data:", data.decode('utf-8')
sk.sendto(data, addr)
sk.close()
建立udp客戶端的基本步驟
建立套接字
收發資料
關閉套接字
import socket
host = '127.0.0.1'
port = 3214
sk = socket.socket(socket.af_inet, socket.sock_dgram)
data = 'hello'
while data:
sk.sendto(data, (host, port))
if data == "bye":
break
data, addr = sk.recvfrom(1024)
print "recv data:", data
data = raw_input('please message:\n')
sk.close()
# tcpclient與udpclient區別
# 建立socket時的區別
# tcp需要鏈結服務端
# 收發資料方法不同
這裡與tcp的區別就是不用建立連線,客戶端只是收發訊息,並不會與伺服器建立連線
python套接字程式設計 python套接字程式設計
服務端 usr bin python coding utf 8 import socket s socket.socket host socket.gethostname port 12345 s.bind host,port s.listen 5 while true c,addr s.accep...
python 套接字程式設計
客戶端 import socket 1,買手機 phone socket.socket socket.af inet,socket.sock stream 2,請求連線 phone.connect 127.0.0.1 8082 3,通訊 while true msg input 請輸入傳送文字 st...
Python套接字Socket程式設計
1.client客戶端 import socket def main 建立乙個udp套接字 udp socket socket.socket socket.af inet,socket.sock dgram 從鍵盤獲取資料 send data input 請輸入要傳送的內容 使用套接字收發資料 ud...