python 3.5(socket)
Socket
socket通常也稱作"套接字",用於描述IP地址和端口,是一個通信鏈的句柄,應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。
socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,對於文件用【打開】【讀寫】【關閉】模式來操作。socket就是該模式的一個實現,socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉)
socket和file的區別:
- file模塊是針對某個指定文件進行【打開】【讀寫】【關閉】
- socket模塊是針對 服務器端 和 客戶端Socket 進行【打開】【讀寫】【關閉】
簡單測試
socket.server服務器端
#!/use/bin/env python3 #-*-conding:UTF-8-*- import socket import sys # 創建 socket 對象 serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) # 獲取本地主機名 host = (‘10.10.10.68‘) port = 9999 # 綁定端口 serversocket.bind((host, port)) # 設置最大連接數,超過後排隊 serversocket.listen(5)while True: # 建立客戶端連接 client_socket, addr = serversocket.accept() print("連接地址: %s" % str(addr)) manager = ‘我勒個大草!‘ + "\r\n" client_socket.send(manager.encode(‘utf-8‘)) client_socket.close()
socket.client客戶端
#!/use/bin/env python3 #-*-conding:UTF-8-*- import socket # 創建 socket 對象s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #AF_INET使用IPV4,SOCK_STREAM使用TCP協議 (默認) # 獲取本地主機名 host = (‘10.10.10.68‘) # 設置端口好 port = 9999 # 連接服務,指定主機和端口 s.connect((host, port)) # 接收小於 1024 字節的數據 manager = s.recv(1024) s.close() print (manager.decode(‘utf-8‘))
更多功能
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
參數一:地址簇
socket.AF_INET IPv4(默認)
socket.AF_INET6 IPv6socket.AF_UNIX 只能夠用於單一的Unix系統進程間通信
參數二:類型
socket.SOCK_STREAM 流式socket , for TCP (默認)
socket.SOCK_DGRAM 數據報式socket , for UDPsocket.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 ,則系統就會根據地址格式和套接類別,自動選擇一個合適的協議
python 3.5(socket)