十五、python開發之網絡通信socket
阿新 • • 發佈:2018-05-22
bin PE 本機 線程 seq read sock_raw get HR 一、客戶端:
1、導入socket庫
import socket
2、指定協議類型
client = socket.socket( ) #不填默認是socket.AF_INET,socket.SOCK_STREAM)
協議類型有:
3、連接服務器
client.connect((‘www.baidu.com‘,80)) #使用元組tuple的方式傳遞兩個參數
4、發送數據
client.send(b‘你好‘) #傳送的數據必須為字節的方式
5、接收數據
data = client.recv(1024) #每次接收1K數據,data為接收到的數據
6、關閉socket
client.close()
二、服務器端:
1、選擇協議:
server = socket.socket()
2、監聽端口:
server.bind((‘localhost‘,80)) #使用元組tuple方式傳參
server.listen(3) #監聽端口,並設置最大等待連接數
3、等待客戶端連接:
while True:
conn,addr = server.accept() #接收新連接
t = threading.Thread(target = tcplink,args=(conn,addr)) #創建新線程處理tcp連接
t.start()
4、與客戶端數據交互
while True:
data = conn.recv(1024) #接收1kb數據
conn.send(data.upper()) #將客戶端的數據小寫變大寫傳回去
socket 類型 | 描述 |
socket.AF_UNIX | 用於同一臺機器上的進程通信(既本機通信) |
socket.AF_INET | 用於服務器與服務器之間的網絡通信IPV4方式 |
socket.AF_INET6 | 基於IPV6方式的服務器與服務器之間的網絡通信 |
socket.SOCK_STREAM | 基於TCP的流式socket通信 |
socket.SOCK_DGRAM | 基於UDP的數據報式socket通信 |
socket.SOCK_RAW | 原始套接字,普通的套接字無法處理ICMP、IGMP等網絡報文,而SOCK_RAW可以;其次SOCK_RAW也可以處理特殊的IPV4報文;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項由用戶構造IP頭 |
socket.SOCK_SEQPACKET | 可靠的連續數據包服務 |
十五、python開發之網絡通信socket