網絡編程

架構

客戶端

CS架構:client  ->  server        html

瀏覽器

BS架構:browser  ->  servershell

相互通訊

相互通訊的本質發送的是字節(01)瀏覽器

交換機的做用:爲接入的網絡節點提供電信號通路服務器

路由器:連通不一樣的網絡,另外一個做用是選擇信息傳送的線路網絡

經過在cmd中輸入ipconfig查看本身的內網ip,公網ip須要租服務器架構

socket模塊實現網絡通訊

socket模塊socket

 黏包

一般一次的數據發送與接收的最大限度是1024字節,可是當超過這個限度時,這次的數據傳送只包含1024字節,剩下的內容並無丟失,當下次數據發送來時,就會發送上次超過限度的數據,依次向後延送,這就是黏包.ide

同時執行多條命令以後,獲得的結果極可能只有一部分,在執行其餘命令的時候又接收到以前執行的另一部分結果,這種顯現就是黏包。網站

import struct
import subprocess
import socket

print("server link start ...")
server = socket.socket()
server.bind(("192.168.13.110", 9527))
server.listen(5)
while True:
    con, di = server.accept()
    try:
        while True:
            ret = con.recv(1024).decode()
            # 操做命令
            ret_command = subprocess.Popen(ret,
                                           shell=True,
                                           stderr=subprocess.PIPE,
                                           stdout=subprocess.PIPE
                                           )
            ret_command_out = ret_command.stdout.read()
            # 操做指令執行後的內容長度
            length_out = struct.pack("i", len(ret_command_out))
            ret_command_err = ret_command.stderr.read()
            # 操做指令錯誤提示內容的長度
            length_err = struct.pack("i", len(ret_command_err))
            if ret_command_err:
                # 發送操做指令錯誤提示內容的長度
                con.send(length_err)
                con.send(ret_command_err)
            else:
                # 發送操做指令執行後的內容長度
                con.send(length_out)
                con.send(ret_command_out)
    except ConnectionResetError as e:
        con.close()
        continue
server
import struct
import socket
print("client link start ...")
client = socket.socket()
client.connect(("192.168.13.110", 9527))
# 創建鏈接
while True:
    # 不能發送空
    content = input("請輸入指令>>>>")
    if not content:
        continue
    client.send(content.encode())
    ret_received = ""
    ret_received_length = 0
    # 接收發送的內容長度
    length = struct.unpack("i", client.recv(4))[0]
    ret_content = client.recv(1024).decode("gbk")
    # 將這個長度的內容接收完整
    while ret_received_length < length:
        ret_received_length += len(ret_content)
        ret_received += ret_content

    print(ret_received)
client

 三次握手

TCP名爲傳輸控制協議,三次握手只是相比較來講保證了傳輸數據的可靠性,實際上任何協議多沒法保證數據的徹底可靠,三次握手通俗講,發送方爲A,接收方爲B,第一次>>B知道本身能夠接收到A發送的信息,第二次>>>A知道B能夠接收到本身發送的信息,第三次>>雙方確認完畢,A告訴B咱們之間能夠進行交流了spa

四次揮手

假設請求中斷方爲A,接收中斷請求方爲B.1>>A給B發送中斷請求,2->>接收到中斷請求後告訴A,你再等等我還沒準備好,而後A繼續等待,3->>發送消息給A我要斷開鏈接了4->>A收到B的斷開消息後,不信任,再次發送信息確認,如果B到信息則斷開鏈接,沒有則重傳,此時A等到一段時間沒有A的應答,知道B已經斷開了,而後本身也斷開鏈接

OSI七層模型

七層模型

 

五層模型

 

斷開鏈接時反應到代碼上:拋出異常/發送空內容;

1. DHCP,自動位局域網內容電腦分配IP。
2. 網關,路由器中鏈接交換機的口。
3. IP,4個點分的十進制表示  192.11.111.11
4. 子網掩碼,
    IP: 192.168.13.99
    掩碼:255.255.255.0                 
    將擋住的IP位數做爲網段。
    未擋住的部分做爲可變的值。
5. 局域網/城域網/廣域網 
6. arp協議,ARP協議就是用來獲取目標IP地址所對應的MAC地址的 
7. DNS,域名解析,根據域名解析出IP 
8. 端口,是爲了將同一個電腦上的不一樣程序進行隔離。IP是找電腦,端口是找電腦上的程序,http網站默認端口:80 ;https網站默認端口:443,範圍1 - 65535,通常8000
相關文章
相關標籤/搜索