zoukankan      html  css  js  c++  java
  • 疫情环境下的网络学习笔记 python 4.20

    4.20笔记

    正课

    socket

    计算机之间进行通信一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据

    套接字家族的名字:AF_INET

    preview

    套接字 例

    以打电话为例,分为服务端和客户端

    # 服务端
    import socket
    # 1. 买手机:得到一个实例化对象
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 2. 绑定手机卡
    phone.bind(('127.0.0.1',8000)) # 元组形式放ip+端口
    # 3. 开机
    phone.listen(5)  # backlog=5 半连接池的大小
    # 4. 等待电话连接请求
    conn,client_addr = phone.accept()
    print(conn)
    print('客户端的ip和端口:',client_addr)
    # 5. 接收消息,发消息
    data=conn.recv(1024)  # 最多接收数据1024bytes,bytes类型
    # 客户端 服务端一次接收的数据有限,这个数值增大没有意义
    conn.send(data.upper())
    # 对接收的数据进行处理
    # 6. 关闭电话连接conn
    conn.close()
    # 7. 可选操作:关机
    phone.close
    
    # 客户端
    import socket
    #1、买手机
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 流式协议=》tcp协议
    #2、拨通服务端电话
    phone.connect(('127.0.0.1',8080))
    #3、通信
    import time
    time.sleep(2)
    phone.send('歪比歪比'.encode('utf-8'))
    data=phone.recv(1024)
    print(data.decode('utf-8'))
    #4、关闭连接(必选的回收资源的操作)
    phone.close()
    

    收发实际上是在跟自己的缓存打交道,向网卡要数据,不是一次send对应一次recv

    处理bug

    1. 客户端输入空消息的时候continue

    2. 服务端在接收发送的时候客户端可能会被关闭:加入try except异常处理

    3. 把整个accept放进while 循环,一个客户端断开以后,close之后再建立一个新的连接,再接收别的客户端的数据

      以后会用并发代替,不会用

    # 客户端
    import socket
    phone = socket.socket(-1,-1)
    phone.connect(('127.0.0.1',8000))
    while True:
        cmd = input('需要执行的指令:')
        if not cmd:
            continue
        if cmd == 'q':
            break
        phone.send(cmd.encode('utf-8'))
        data = phone.recv(1024)
        print(data.decode('utf-8'))
    phone.close()
    
    
    # 服务端
    import socket
    phone = socket.socket(-1,-1)
    phone.bind(('127.0.0.1',8000))
    phone.listen(5)
    print('服务端启动完成,监听地址为:%s:%s' %('127.0.0.1',8000))
    while True:
        conn, client_addr = phone.accept()
        print(client_addr)
        while True:
            try:
                data = conn.recv(1024)
                if len(data)==0:
                    break
                print('接收到的数据:',data.decode('utf-8'))
                conn.send(f'{data}歪比巴布'.encode('utf-8'))
            except Exception as e:
                print(e)
                print('连接断开')
                break
        conn.close()
    

    udp

    # 客户端
    import socket
    ip_port=('127.0.0.1',9000)
    BUFSIZE=1024
    udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    while True:
        msg=input('>>: ').strip()
        if not msg:continue
    
        udp_server_client.sendto(msg.encode('utf-8'),ip_port)
    
        back_msg,addr=udp_server_client.recvfrom(BUFSIZE)
        print(back_msg.decode('utf-8'),addr)
    
    # 服务端
    import socket
    ip_port=('127.0.0.1',9000)
    BUFSIZE=1024
    udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    udp_server_client.bind(ip_port)
    
    while True:
        msg,addr=udp_server_client.recvfrom(BUFSIZE)
        print(msg,addr)
    
        udp_server_client.sendto(msg.upper(),addr)
    
  • 相关阅读:
    人名币转大写
    Http协议与TCP协议简单理解
    unity3d常用属性汇总
    ConcurrentHashMap的key value不能为null,map可以?
    一个线程池中的线程异常了,那么线程池会怎么处理这个线程?
    Dubbo负载均衡算法
    [LeetCode] 240. 搜索二维矩阵 II ☆☆☆(二分查找类似)
    [LeetCode] 74. 搜索二维矩阵 ☆☆☆(二分查找)
    Maven中的dependencyManagement 意义
    深入理解maven构建生命周期和各种plugin插件
  • 原文地址:https://www.cnblogs.com/telecasterfanclub/p/12739531.html
Copyright © 2011-2022 走看看