• 网络编程


    一.客户端/服务器架构

    UDP架构:

    import socket
    #创建一个udp协议下的socket,需要使用参数type
    udp_server = socket.socket(type=socket.SOCK_DGRAM) #DGRAM : datagram  数据报
    #拿到一个地址,启动程序的时候,告诉电脑,你给我这个程序分配8001端口.
    ip_port = ('192.168.15.113',8001)
    #绑定IP地址和端口
    udp_server.bind(ip_port)
    
    print('准备接收消息了...')
    #接收消息,from_client_msg来自客户端的消息,client_addr客户端的地址('192.168.15.113', 8001)
    from_client_msg,client_addr = udp_server.recvfrom(1024)  #阻塞住了
    print(11111)
    print(from_client_msg)
    print(client_addr)
    #发送消息
    udp_server.sendto(b'gunduzi',client_addr)
    #关闭udp的socket对象
    udp_server.close()
    服务端
    import socket
    udp_client = socket.socket(type=socket.SOCK_DGRAM)
    server_ip_port = ('192.168.15.113',8001)
    
    udp_client.sendto(b'hello',server_ip_port)
    
    from_server_msg,server_addr = udp_client.recvfrom(1024)
    print(from_server_msg)
    print(server_addr)
    
    udp_client.close()
    客户端

    TCP架构:

    import socket
    
    # 创建服务端socket对象
    server = socket.socket()
    
    
    # 绑定IP和端口
    server.bind(('192.168.13.100',8000))
    
    # 后边可以等5个人
    server.listen(5)
    
    print('服务端准备开始接收客户端的连接...')
    # 等待客户端来连接,如果没人连接就一直等待
    # conn是客户端与服务端连接的对象,服务端以后要通过该对象进行收发数据
    # addr是客户端的地址信息
    # 阻塞,只有客户端进行连接,则获取客户端连接然后开始进行通信
    conn,addr = server.accept()
    
    print('已经有人连接上了,客户端信息:',addr)
    
    # 通过对象去获取(客户端发送的消息)
    # 1024表示:服务端获取数据时,一次最多拿1024字节
    data = conn.recv(1024)
    print('收到消息:',data.decode('utf-8'))
    
    
    # 服务端通过连接对象给客户端恢复一个消息
    conn.send('赛利亚!你好,我是凯丽'.encode('utf-8'))
    
    # 与客户端断开连接
    conn.close()
    
    # 关闭服务端的服务
    server.close()
    服务端
    import socket
    
    client = socket.socket()
    
    # 客户端向服务端发起连接请求
    # 阻塞,去连接,直到连接成功才会继续向下执行
    client.connect(('192.168.13.100',8000))
    
    # 连接上服务端后,向服务端发送消息
    client.send('你好啊,我是赛利亚...'.encode('utf-8'))
    
    
    # 等待服务端回复消息
    data = client.recv(1024)
    print(data.decode('utf-8'))
    
    # 关闭自己(客户端)
    client.close()
    客户端

    服务端套接字函数

    s.bind() 绑定(主机,端口号)到套接字
    s.listen() 开始TCP监听
    s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来

    客户端套接字函数
    s.connect() 主动初始化TCP服务器连接
    s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

    公共用途的套接字函数
    s.recv() 接收TCP数据
    s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
    s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
    s.recvfrom() 接收UDP数据
    s.sendto() 发送UDP数据
    s.getpeername() 连接到当前套接字的远端的地址
    s.getsockname() 当前套接字的地址
    s.getsockopt() 返回指定套接字的参数
    s.setsockopt() 设置指定套接字的参数
    s.close() 关闭套接字

    面向锁的套接字方法
    s.setblocking() 设置套接字的阻塞与非阻塞模式
    s.settimeout() 设置阻塞套接字操作的超时时间
    s.gettimeout() 得到阻塞套接字操作的超时时间

    面向文件的套接字的函数
    s.fileno() 套接字的文件描述符
    s.makefile() 创建一个与该套接字相关的文件

    二.OSI7层模型

    三、简述 三次握手、四次挥手的流程

    #三次握手:
       1.客户端(Client)向服务端(Server)发送一次请求
       2.服务端确认并回复客户端
       3.客户端检验确认请求,建立连接
    #四次挥手:
       1.客户端向服务端发一次请求
       2.服务端回复客户端(断开客户端-->服务端)
       3.服务端再次向客户端发请求(告诉客户端可以断开了)
       4.客户端确认请求,连接断开

    四、线程

    import  time
    import threading
    
    def task(a,b,c):
        time.sleep(3)
        print('佩奇拿快递去')
    
    def play():
        time.sleep(4)
        print('陪佩奇女友出去玩')
    
    def ktv():
        time.sleep(5)
        print('陪alex女友唱歌去')
    
    
    # 创建一个线程
    # 让该线程去执行任务(函数)
    n1 = threading.Thread(target=task,args=(1,2,3,))
    # 开始执行
    n1.start()
    
    # 创建一个线程
    # 让该线程去执行任务(函数)
    n1 = threading.Thread(target=play)
    # 开始执行
    n1.start()
    
    
    # 创建一个线程
    # 让该线程去执行任务(函数)
    n1 = threading.Thread(target=ktv)
    # 开始执行
    n1.start()
    
    # 我坐家里打游戏
    print('开黑,王者荣耀')
    print('吃鸡,四黑有没有')
    print('没有我一会再来')
    初始线程
    import time
    import socket
    import threading
    
    
    def task(conn):
        time.sleep(20)
        data = conn.recv(1024)
        print(data)
        conn.close()
    
    server = socket.socket()
    server.bind(('192.168.13.100',8000,))
    server.listen(5)
    
    while True:
        conn,addr = server.accept()
        n = threading.Thread(target=task,args=(conn,))
        n.start()
    socket和线程配合

    五、进度条

    def func(size,total_size):
        val = int(size/total_size * 100)
        time.sleep(0.05)
        print('
    %s%s%%'%('*'*val,val),end='')
    
    for i in range(101):
        func(i,100)
  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/hmw112626/p/9637513.html
Copyright © 2020-2023  润新知