网络编程

架构

客户端

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
相关文章
相关标签/搜索