Python進階【第一篇】socket
1.socket()模組函式
要使用socket.socket()函式來建立套接字。其語法如下:
socket.socket(socket_family,socket_type,protocol=0)
socket_family可以是如下引數:
socket.AF_INET IPv4(預設)
socket.AF_INET6 IPv6
socket.AF_UNIX 只能夠用於單一的Unix系統程序間通訊
socket_type可以是如下引數:
socket.SOCK_STREAM 流式socket , for TCP (預設)
socket.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 可靠的連續資料包服務
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() 完整發送資料,內部迴圈呼叫send
s.close() 關閉套接字
例項1.簡單實現socket程式
server端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/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
|