网络编程

架构

客户端

CS架构:client  ->  server        

浏览器

BS架构:browser  ->  server

相互通信

相互通信的本质发送的是字节(01)

交换机的作用:为接入的网络节点提供电信号通路

路由器:连通不同的网络,另一个作用是选择信息传送的线路

通过在cmd中输入ipconfig查看自己的内网ip,公网ip需要租服务器

socket模块实现网络通信

socket模块

 黏包

通常一次的数据发送与接收的最大限度是1024字节,但是当超过这个限度时,此次的数据传送只包含1024字节,剩下的内容并没有丢失,当下次数据发送来时,就会发送上次超过限度的数据,依次向后延送,这就是黏包.

同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包。

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我们之间可以进行交流了

四次挥手

假设请求中断方为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

 

posted @ 2018-09-03 16:24  YaoSir66  阅读(174)  评论(0编辑  收藏  举报