• python学习的第32天网络编程part2


    一、IP和ARP协议(了解)

    以太网协议:

    (1)一组电信号称为一组数据报或一组数据帧

    (2)但凡接入互联网的煮鸡,必须有一块独一无二的网卡

    (3)所有的数据报都必须分为报头和数据两部分。报头固定18个字符

    IP协议:

    • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
    • 范围0.0.0.0-255.255.255.255
    • 一个ip地址通常写成四段十进制数,例:172.16.10.1

    ip地址分成两部分

    • 网络部分:标识子网
    • 主机部分:标识主机

    注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

    例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网

    2、ARP协议

    作用:以广播的方式发送数据包,获取目标主机的mac地址

    二、套接字socket

    1、socket是什么?
    翻译过来称为套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议
    在程序员的言论,他就是一个封装好的模块!要完成网络通讯,只需要使用系统提供的socket模块就行

    2、TCP和UDP是传输层最常见的协议,主要控制传输数据的方式。(传输层)

    TCP:
    传输方式:通过三次握手来与服务器建立连接,

    优点:可以保证数据的完整性

    比如:a机器给b机器发送数据包 要求b机器必须立即返回一个确认包,a机器会等待一段时间,如果超时还没有收到确认,则重发数据
    缺点:传输效率低
    使用场景: 文字聊天,支付宝转账等,

    UDP:
    传输方式:不需要建立连接,直接发送
    缺点: 不能保证数据的完整性
    优点:传输效率比TCP高
    使用场景:视频通话,语音通话,UDP

    python中的socket

    在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data

    在写网络编程的时候,必然是有两台代码,对应着客户端和服务器

    使用socket来完成TCP通讯
    应该先完成服务器的代码编写

    3、TCP的服务端:

    import socket
    
    #1.买手机
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议,
    print(phone) #是用来接收链接请求,从而建立链接的
    
    #2.插手机卡
    phone.bind(('127.0.0.1',8080)) #0-65535
    
    #3.开机
    phone.listen(5) # 同一时刻最大请求数为5个
    
    print('start....')
    #4.等待电话请求
    conn,client_addr=phone.accept() #(双向链接的套接字对象,存放客户端ip和端口的小元组)
    # print(conn) # conn代表双向链接,用来收发消息
    # print(client_addr)
    
    #5.收发消息
    data=conn.recv(1024) #1024接收的最大字节数bytes
    print('收到客户的数据',data)
    conn.send(data.upper())
    
    #6.挂电话链接
    conn.close()
    
    #7.关机
    phone.close()

    4、TCP的客户端

    import socket
    
    #1.买手机
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议,
    
    #2.拨号
    phone.connect(('127.0.0.1',8080))
    
    #3.发收消息
    phone.send('hello'.encode('utf-8')) # 只能发bytes类型
    data=phone.recv(1024)
    print('收到服务端的消息: ',data)
    
    #4.挂电话链接
    phone.close()

    5、UDP的服务器

    import socket
    # 1.创建socket对象
    s = socket.socket(type=socket.SOCK_DGRAM)
    
    # 2.绑定端口和ip
    s.bind(("127.0.0.1",10000))
    
    while True:
        # 3.接受数据
        res = s.recv(1024)
        print(res)
    
    while True:
        msg = input(">>>:")
        # 需要获取对方的ip和端口
        #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000))
    
    # 关闭资源
    s.close()

    6、UDP的客户端

    import socket
    # 1.创建socket对象
    c = socket.socket(type=socket.SOCK_DGRAM)
    while True:
        msg = input(">>>:")
        c.sendto(msg.encode("utf-8"),("127.0.0.1",10000))
    
    c.close()

    7、TCP的通信循环和链接循环的客户端

    from socket import *
    
    server = socket(AF_INET, SOCK_STREAM)
    server.bind(('127.0.0.1', 7500))
    server.listen(5)
    while True:
        while True:
            conn, client = server.accept()
            data = conn.recv(1024)
            conn.send(data)
    
        conn.close()
    
    server.close()
  • 相关阅读:
    vue实现通过链接跳转到页面
    vue-cli2-项目的创建
    平均数
    Spring-Spring简介
    vue + element-ui 表单校验封装公用方法
    Python(一)数据结构和算法的20个练习题问答
    Python包中__init__.py作用
    if __name__=="__main__":
    execute immediate
    oracle基础知识过一遍(原创)
  • 原文地址:https://www.cnblogs.com/ye-hui/p/9905778.html
Copyright © 2020-2023  润新知