摘要:一個包來了之后,到底是交給瀏覽器還是,就需要端口號來區(qū)分。每個網(wǎng)絡(luò)程序都向操作系統(tǒng)申請唯一的端口號,這樣,兩個進程在兩臺計算機之間建立網(wǎng)絡(luò)連接就需要各自的地址和各自的端口號。
網(wǎng)絡(luò)通信的三要素
IP
通信的時候, 雙方必須知道對方的標(biāo)識, 好比發(fā)郵件必須知道對方的郵件地址。 互聯(lián)網(wǎng)上每個計算機的唯一標(biāo)識就是IP地址, 類似 123.123.123.123 。
IP地址實際上是一個32位整數(shù)(稱為IPv4) , 以字符串表示的IP地址,如 192.168.0.1 實際上是把32位整數(shù)按8位分組后的數(shù)字表示, 目的是便于閱讀。 IPv6地址實際上是一個128位整數(shù), 它是目前使用的IPv4的升級版, 以字符串表示。類似于 2001:0db8:85a3:0042:1000:8a2e:0370:7334 。
端口port
在兩臺計算機通信時, 只發(fā)IP地址是不夠的, 因為同一臺計算機上跑著多個網(wǎng)絡(luò)程序。 一個IP包來了之后, 到底是交給瀏覽器還是QQ, 就需要端口號來區(qū)分。
每個網(wǎng)絡(luò)程序都向操作系統(tǒng)申請唯一的端口號, 這樣, 兩個進程在兩臺計算機之間建立網(wǎng)絡(luò)連接就需要各自的IP地址和各自的端口號。
TCP/UDP協(xié)議
為了把全世界的所有不同類型的計算機都連接起來, 就必須規(guī)定一套全球通用的協(xié)議,大家把互聯(lián)網(wǎng)的協(xié)議簡稱TCP/IP協(xié)議
socket編程Socket是網(wǎng)絡(luò)編程的一個抽象概念。 通常我們用一個Socket表示“打開了一個網(wǎng)絡(luò)鏈接”, 而打開一個Socket需要知道目標(biāo)計算機的IP地址和端口號, 再指定協(xié)議類型即可。
import socket # socket.gethostname()當(dāng)不傳入?yún)?shù)時,返回本機主機名 print(socket.gethostname()) #DESKTOP-EN0LQJH #域名(英語:Domain Name),簡稱域名、網(wǎng)域,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱 #通過域名查找服務(wù)器IP地址 print(socket.gethostbyname("www.baidu.com")) #119.75.216.20 #通過一個IPv4的地址來獲取主機信息 print(socket.gethostbyaddr("114.114.114.114")) #通過IP/port組合,訪問服務(wù)器信息 # 如果是AF_INET則格式為:(address, port),如果為AF_INET6,則返回(address, port, flow info, scope id) print(socket.getaddrinfo("www.xunlei.com",80))用socket實現(xiàn)簡易的web服務(wù)器
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. 創(chuàng)建socket對象 socket_server = socket.socket() #2. 綁定IP和端口 socket_server.bind(("192.168.1.165",9999)) print("服務(wù)器端已經(jīng)啟動9999端口......") #3. 監(jiān)聽是否有客戶端連接 socket_server.listen(5) while True: # 4. 接受客戶端的連接 socket_client,address = socket_server.accept() # 5. 接收客戶端發(fā)來的信息 data = socket_client.recv(1024) # 6. 與客戶端進行交互, 返回給客戶端信息 reply_info(socket_server) socket_server.close()
圖過后貼上
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42584.html
摘要:協(xié)程實現(xiàn)連接在網(wǎng)絡(luò)通信中,每個連接都必須創(chuàng)建新線程或進程來處理,否則,單線程在處理連接的過程中,無法接受其他客戶端的連接。所以我們嘗試使用協(xié)程來實現(xiàn)服務(wù)器對多個客戶端的響應(yīng)。 協(xié)程實現(xiàn)TCP連接 在網(wǎng)絡(luò)通信中,每個連接都必須創(chuàng)建新線程(或進程) 來處理,否則,單線程在處理連接的過程中, 無法接受其他客戶端的連接。所以我們嘗試使用協(xié)程來實現(xiàn)服務(wù)器對多個客戶端的響應(yīng)。與單一TCP通信的構(gòu)架...
摘要:我們來編寫一個簡單的服務(wù)器程序,它接收客戶端連接,回復(fù)客戶端發(fā)來的請求。如果一切順利,新浪的服務(wù)器接受了我們的連接,一個連接就建立起來的,后面的通信就是發(fā)送網(wǎng)頁內(nèi)容了。 TCP TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。在簡化的計算機網(wǎng)絡(luò)OSI模型中,它完成第四...
摘要:是建立可靠連接,并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。相對,則是面向無連接的協(xié)議。測試結(jié)果用兩個命令行分別啟動服務(wù)器和客戶端測試開啟服務(wù)端完成一次通信 UDP TCP是建立可靠連接, 并且通信雙方都可以以流的形式發(fā)送數(shù)據(jù)。 相對TCP, UDP則是面向無連接的協(xié)議。使用UDP協(xié)議時, 不需要建立連接, 只需要知道對方的IP地址和端口號, 就可以直接發(fā)數(shù)據(jù)包。 但是, 能不能到達就不知道...
摘要:定義了所有元素的對象和屬性,以及訪問它們的方法。換言之,是關(guān)于如何獲取修改添加或刪除元素的標(biāo)準(zhǔn)。根據(jù)標(biāo)準(zhǔn),中所有內(nèi)容都是節(jié)點。好比我有兩個下拉列表,第一列表是選擇省份,那么我選擇某一個省份,那么另一個列表也會對應(yīng)顯示該省份的城市。 什么是DOM? DOM (Document Object Model) 譯為文檔對象模型,是 HTML 和 XML 文檔的編程接口。HTML DOM 定義了...
摘要:定義了所有元素的對象和屬性,以及訪問它們的方法。換言之,是關(guān)于如何獲取修改添加或刪除元素的標(biāo)準(zhǔn)。根據(jù)標(biāo)準(zhǔn),中所有內(nèi)容都是節(jié)點。好比我有兩個下拉列表,第一列表是選擇省份,那么我選擇某一個省份,那么另一個列表也會對應(yīng)顯示該省份的城市。 什么是DOM? DOM (Document Object Model) 譯為文檔對象模型,是 HTML 和 XML 文檔的編程接口。HTML DOM 定義了...
閱讀 3645·2021-11-24 10:25
閱讀 2585·2021-11-24 09:38
閱讀 1261·2021-09-08 10:41
閱讀 2939·2021-09-01 10:42
閱讀 2659·2021-07-25 21:37
閱讀 2014·2019-08-30 15:56
閱讀 944·2019-08-30 15:55
閱讀 2780·2019-08-30 15:54