兩臺或多臺電腦之間不同程序的通訊大致分為以下兩種
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供潛山網(wǎng)站建設(shè)、潛山做網(wǎng)站、潛山網(wǎng)站設(shè)計(jì)、潛山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、潛山企業(yè)網(wǎng)站模板建站服務(wù),十載潛山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
第一種是應(yīng)用類:在不同電腦之間要安裝相對應(yīng)桌面應(yīng)用才可以進(jìn)行通訊,比如我們?nèi)粘J褂玫腝Q微信等
第二種是web類:最常見的就是CSDN,博客園等可以直接在瀏覽器進(jìn)行訪問的應(yīng)用
C/S即:Client與Server ,中文意思:客戶端與服務(wù)器端架構(gòu),這種架構(gòu)也是從用戶層面(也可以是物理層面)來劃分的。
這種架構(gòu)方式有很大的缺點(diǎn):這里的客戶端一般泛指客戶端應(yīng)用程序EXE,程序需要先安裝后,才能運(yùn)行在用戶的電腦上,對用戶的電腦操作系統(tǒng)環(huán)境依賴較大。會給用戶帶來極大的不變,下面就引出另一種相對好用的架構(gòu)方法
Browser與Server,中文意思:瀏覽器端與服務(wù)器端架構(gòu),這種架構(gòu)是從用戶層面來劃分的。
Browser瀏覽器,其實(shí)也是一種Client客戶端,只是這個客戶端不需要大家去安裝什么應(yīng)用程序,只需在瀏覽器上通過HTTP請求服務(wù)器端相關(guān)的資源(網(wǎng)頁資源),客戶端Browser瀏覽器就能進(jìn)行增刪改查,對用戶的電腦操作系統(tǒng)要求相對較少
服務(wù)端需要一直運(yùn)行,等待用戶的請求,并將用戶想要的數(shù)據(jù)及時的返回給客戶端
客戶端就是用戶想發(fā)送請求的時候才向服務(wù)端要數(shù)據(jù)
ip相當(dāng)于一臺機(jī)器在網(wǎng)絡(luò)上的位置,而端口號就是為了找到某臺計(jì)算機(jī)上的唯一的一個程序
并且我們端口號一般都開在8000之后
不是的同一個意思,也不是同一種類型地址.
雖然MAC和IP地址在咱們電腦里都是以二進(jìn)制表示的。
(1)MAC地址通常是48位的。
(2)IP地址通常是32位的。用途意義不同。
(1)MAC英文全稱是Media Access Control Addres。MAC地址是網(wǎng)絡(luò)設(shè)備制造商在生產(chǎn)時燒錄在一種閃存芯片里,用來確認(rèn)網(wǎng)絡(luò)設(shè)備位置的位址,可以理解為物理地址。
(2)IP地址全稱是Internet Protocol Address,是指互聯(lián)網(wǎng)協(xié)議地址。IP地址是一種統(tǒng)一的地址格式,IP地址為網(wǎng)上的每一個網(wǎng)絡(luò)和每一臺設(shè)備分配一個邏輯地址。
TCP(Transmission Control Protocol)可靠的、面向連接的協(xié)議(eg:打電話)、傳輸效率低全雙工通信(發(fā)送緩存&接收緩存)、面向字節(jié)流。使用TCP的應(yīng)用:Web瀏覽器;電子郵件、文件傳輸程序。
UDP(User Datagram Protocol)不可靠的、無連接的服務(wù),傳輸效率高(發(fā)送前時延?。?,一對一、一對多、多對一、多對多、面向報文,盡最大努力服務(wù),無擁塞控制。使用UDP的應(yīng)用:域名系統(tǒng)(DNS);視頻流;IP語音(VoIP)。
所謂的局域網(wǎng),是指在一個特定的區(qū)域內(nèi),由很多臺計(jì)算機(jī)之間相互聯(lián)成的一個計(jì)算機(jī)組
“交換機(jī)(英文:Switch,意為“開關(guān)”)是一種用于電信號轉(zhuǎn)發(fā)的網(wǎng)絡(luò)設(shè)備。它可以為接入交換機(jī)的任意兩個網(wǎng)絡(luò)節(jié)點(diǎn)提供獨(dú)享的電信號通路。最常見的交換機(jī)是以太網(wǎng)交換機(jī)。交換機(jī)通常是用來解決多臺機(jī)器之間的通信問題
局域網(wǎng)中的機(jī)器想要訪問局域網(wǎng)外的機(jī)器,需要通過網(wǎng)關(guān)的訪問
網(wǎng)關(guān)的優(yōu)點(diǎn):
微服務(wù)網(wǎng)關(guān)介于服務(wù)端與客戶端的中間層,所有外部服務(wù)請求都會先經(jīng)過微服務(wù)網(wǎng)關(guān)客戶只能跟微服務(wù)網(wǎng)關(guān)進(jìn)行交互,無需調(diào)用特定微服務(wù)接口,使得開發(fā)得到簡化
一個單個的發(fā)送者和一個接受者之間通過網(wǎng)絡(luò)進(jìn)行的通信。
一個發(fā)送者和多個接受者之間的通信。
主機(jī)之間“一對所有”的通訊模式,網(wǎng)絡(luò)對其中每一臺主機(jī)發(fā)出的信號都進(jìn)行無條件復(fù)制并轉(zhuǎn)發(fā),所有主機(jī)都可以接收到所有信息(不管你是否需要都必須接收,并且只有相對應(yīng)得一臺才會有反應(yīng))。
地址解析協(xié)議,即ARP,是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議。主機(jī)發(fā)送信息時將包含目標(biāo)IP地址的ARP請求廣播到局域網(wǎng)絡(luò)上的所有主機(jī),并接收返回消息,以此確定目標(biāo)的物理地址。
收到返回消息后將該IP地址和物理地址存入本機(jī)ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節(jié)約資源。
廣域網(wǎng)(WAN),就是我們通常所說的Internet,它是一個遍及全世界的網(wǎng)絡(luò)。
路由器是連接因特網(wǎng)中個局域網(wǎng)、廣域網(wǎng)的設(shè)備,它根據(jù)信道的情況自動選擇和設(shè)定路由,以最佳路徑,按前后順序發(fā)送信號的設(shè)備。路由器英文名Router,路由器是互聯(lián)網(wǎng)絡(luò)的樞紐、“交通警察”。目前路由器已經(jīng)廣泛應(yīng)用于各行各業(yè),各種不同檔次的產(chǎn)品已經(jīng)成為實(shí)現(xiàn)各種骨干網(wǎng)內(nèi)部連接、骨干網(wǎng)間互聯(lián)和骨干網(wǎng)與互聯(lián)網(wǎng)互聯(lián)互通的主力軍。簡單來說,路由器就是一個連接媒介,用來連接一個個小的局域網(wǎng)。
******來擴(kuò)展一下路由器的概念。路由器(Router)又稱網(wǎng)關(guān)設(shè)備(Gateway)是用于連接多個邏輯上分開的網(wǎng)絡(luò),所謂邏輯網(wǎng)絡(luò)是代表一個單獨(dú)的網(wǎng)絡(luò)或者一個子網(wǎng)。當(dāng)數(shù)據(jù)從一個子網(wǎng)傳輸?shù)搅硪粋€子網(wǎng)時,可通過路由器的路由功能來完成。因此,路由器具有判斷網(wǎng)絡(luò)地址和選擇IP路徑的功能,它能在多網(wǎng)絡(luò)互聯(lián)環(huán)境中,建立靈活的連接,可用完全不同的數(shù)據(jù)分組和介質(zhì)訪問方法連接各種子網(wǎng),路由器只接受源站或其他路由器的信息,屬網(wǎng)絡(luò)層的一種互聯(lián)設(shè)備。
子網(wǎng)掩碼(subnet mask)又叫網(wǎng)絡(luò)掩碼、地址掩碼、子網(wǎng)絡(luò)遮罩,它是一種用來指明一個IP地址的哪些位標(biāo)識的是主機(jī)所在的子網(wǎng),以及哪些位標(biāo)識的是主機(jī)的位掩碼。子網(wǎng)掩碼不能單獨(dú)存在,它必須結(jié)合IP地址一起使用。子網(wǎng)掩碼只有一個作用,就是將某個IP地址劃分成網(wǎng)絡(luò)地址和主機(jī)地址兩部分。
其中IP地址和子網(wǎng)掩碼按位與得到的就是網(wǎng)段地址
server.py
import socket sk = socket.socket() #買手機(jī) #sk.bind(('ip','port-端口')) #綁定手機(jī)卡 '127.0.0.1是回環(huán)地址用于同臺電腦不同應(yīng)用之間的通信' sk.bind(('127.0.0.1',8080)) #綁定手機(jī)卡 sk.listen() #監(jiān)聽 等別人給我打電話 conn,addr = sk.accept() #接收到別人的電話, connection 連接 address 地址 conn.recv(1024) #聽別人說話 conn.send(b'i am server') #和別人說話 必須傳一個bytes類型 conn.close() #掛電話 sk.close() #關(guān)手機(jī)
client.py
import socket sk = socket.socket() #買手機(jī) sk.connect(('127.0.0.1',8080)) #撥號碼 while 1: sk.send(bytes(input('>>>'),encoding='utf-8')) ret = sk.recv(1024).decode('utf-8') if ret == 'Bye': sk.send(b'Bye') break print('from server:{}'.format(ret)) sk.close()
?