網絡通訊python
邊緣網絡中的主機數目龐大,計算機網絡是如何實現網絡中的兩臺主機之間的通訊的呢?編程
簡單的來講,計算機網絡中的主機通訊如同現實生活中的物流,當咱們須要發送一個快遞時,咱們須要首先須要準備本身要發送的物品,至關於網絡體系結構中的應用層,編寫本身的發送的消息;第二,要發送的物品每每須要一個外包裝,避免物品的損壞,至關於應用層的消息傳遞到傳輸層進行的封裝(消息封裝爲分組);第三,填寫快遞單的收發地址,於網絡層中填寫IP,端口地址相同;第四,將快遞交給站點準備發送,等價於在鏈路層將分組數據包封裝成幀,準備在物理層發送;最後,快遞員經過既定的物流路線將快遞發送出去,與在物理層經過路由信息表將幀發送出去相同。服務器
網絡數據包傳送網絡
網絡中數據包的傳送大體分爲兩類:socket
Socket編程ide
python經過使用socket抽象網絡中主機進程之間的交互實現網絡通訊。Socket實現了IP地址與端口的抽象,其中IP指定了主機在網絡中的位置,端口指定了主機上接收,發送信息的應用程序。函數
python中,Socket又稱"套接字",應用程序一般經過"套接字"向網絡發出請求或者應答網絡請求,使主機間或者一臺計算機上的進程間能夠通信。spa
服務器端Socket編程計算機網絡
建立Socket對象code
綁定到相應的IP地址端口
打開監聽服務
接收數據
關閉Socket
客戶端Socket編程
建立Socket對象
鏈接到遠程主機IP地址端口
發送數據
關閉Socket
Socket對象建立函數
socket.socket([family[, type[, proto]]])
familly:對應協議簇,AF_UNIX或者AF_INET
type:對應面向鏈接的仍是非鏈接分爲SOCK_STREAM
或SOCK_DGRAM
(TCP和UDP)
proto:協議,HTTP,SMTP等
Socket內置方法
服務器:
s.bind():綁定地址
s.listen():開啓監聽服務
s.accept():被動等待接收客戶端的鏈接請求
客戶端:
s.connect():鏈接到遠程主機
公用:
s.recv():接收TCP數據流
s.send():發送TCP數據流
s.recvfrom():接收UDP數據流
s.sendto():發送UDP數據流
s.close():關閉一個socket鏈接
s.getpeername():返回鏈接套接字的遠程地址
s.getsockname():返回套接字本身的地址
s.setsockopt():設置給定套接字選項的值
s.getsockopt():返回套接字選項的值
s.makefile():建立一個與該套接字相關連的文件
實例
# -*- coding: utf-8 -*- import socket s = socket.socket() #建立socket對象 host = socket.gethostname() #獲取本機主機名 port = 20000 s.bind((host, port)) s.listen(5) #開啓監聽服務,5表示最大能夠鏈接5個客戶機 while True: c, address = s.accept() #創建一個客戶鏈接 print '客戶端地址:', address c.send('hello') #向客戶端發送消息 c.close() #關閉一個socket鏈接
# -*- coding: utf-8 -*- import socket s = socket.socket() #建立socket對象 host = socket.gethostname() #調用socket類方法獲取主機名 port = 20000 #定義綁定端口 s.connect((host, port)) #鏈接到遠程主機 print s.recv(1024) #接收數據,1024是字節數 s.close() #關閉一個socket鏈接