網絡通信的三要素
IP
通信的時候, 雙方必須知道對方的標識, 好比發郵件必須知道對方的郵件地址。 互聯網上每個計算機的唯一標識就是IP地址, 類似 123.123.123.123 。
IP地址實際上是一個32位整數(稱為IPv4) , 以字符串表示的IP地址,如 192.168.0.1 實際上是把32位整數按8位分組后的數字表示, 目的是便于閱讀。端口port
在兩臺計算機通信時, 只發IP地址是不夠的, 因為同一臺計算機上跑著多個網絡程序。 一個IP包來了之后, 到底是交給瀏覽器還是QQ, 就需要端口號來區分。
每個網絡程序都向操作系統申請唯一的端口號, 這樣, 兩個進程在兩臺計算機之間建立網絡連接就需要各自的IP地址和各自的端口號。
TCP/UDP協議
為了把全世界的所有不同類型的計算機都連接起來, 就必須規定一套全球通用的協議,大家把互聯網的協議簡稱TCP/IP協議
socket編程
Socket是網絡編程的一個抽象概念。 通常我們用一個Socket表示“打開了一個網絡鏈接”, 而打開一個Socket需要知道目標計算機的IP地址和端口號, 再指定協議類型即可。
import socket # socket.gethostname()當不傳入參數時,返回本機主機名 print(socket.gethostname()) #DESKTOP-EN0LQJH #域名(英語:Domain Name),簡稱域名、網域,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱 #通過域名查找服務器IP地址 print(socket.gethostbyname('www.baidu.com')) #119.75.216.20 #通過一個IPv4的地址來獲取主機信息 print(socket.gethostbyaddr('114.114.114.114')) #通過IP/port組合,訪問服務器信息 # 如果是AF_INET則格式為:(address, port),如果為AF_INET6,則返回(address, port, flow info, scope id) print(socket.getaddrinfo('www.xunlei.com',80))
用socket實現簡易的web服務器
import socket def reply_info(socketObj): # socketObj.send('ok') with open('hello.html') as f: socketObj.send(f.read().encode('utf-8')) if __name__=="__main__": #1. 創建socket對象 socket_server = socket.socket() #2. 綁定IP和端口 socket_server.bind(('192.168.1.165',9999)) print("服務器端已經啟動9999端口......") #3. 監聽是否有客戶端連接 socket_server.listen(5) while True: # 4. 接受客戶端的連接 socket_client,address = socket_server.accept() # 5. 接收客戶端發來的信息 data = socket_client.recv(1024) # 6. 與客戶端進行交互, 返回給客戶端信息 reply_info(socket_server) socket_server.close()
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com