zoukankan      html  css  js  c++  java
  • python 网络编程

    python网络编程常用模块及固定写法

    socket模块

    基于TCP的C/S架构

    通信循环与连接循环

    # 服务端
    import socket
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 设置端口可重用
    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    # 设置阻塞 
    s.setblocking(1)
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    while True : # 循环连接客户端
        conn, client_addr = server.accept()
        print(client_addr)
        while True:
            try:
                from_client_data = conn.recv(1024)
                print(from_client_data.decode('utf-8'))
                conn.send(from_client_data + b'SB')
            except ConnectionResetError:  # 客户端异常关闭
                break
            except ConnectionAbortedError:# 客户端主动断开连接
                break
        conn.close()
    # server.close()
    
    # 客户端
    import socket
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('127.0.0.1', 8080))  # 与服务端建立连接
    while True:
        client_data = input('>>>')
        if client_data == 'quit':
            break
        client.send(client_data.encode('utf-8'))
        from_server_data = client.recv(1024)
        print(from_server_data.decode('utf-8'))
    client.close()
    

    recv工作方式

    Receive up to buffersize bytes from the socket.
    (最大从套接字接收缓冲区中接收缓冲区大小的字节串.)
    For the optional flags argument, see the Unix manual.(可选参数的设置参口Unix手册.)
    When no data is available, block untilat least one byte is available or until the remote end is closed.
    (当缓冲没有数据是,该方法阻塞,直到缓冲区中出现至少一个数据或者远程端的连接正常关闭.)
    When the remote end is closed and all data is read, return the empty string.
    (当远程端正常关闭,且缓冲区中数据被取完时,该函数返回空值.)

    远程控制

    socketserver模块

    并发服务器固定写法

    import socketserver  # 引入模块
    
    class MyServer(socketserver.BaseRequestHandler):
        # 类名随便定义,但是必须继承socketserver.BaseRequestHandler此类
        def handle(self):  # 写一个handle方法,固定名字
            while True:
                # self.request 相当于conn管道
                from_client_data = self.request.recv(1024).decode('utf-8')
                print(from_client_data)
                to_client_data = input('服务端回信息:').strip()
                self.request.send(to_client_data.encode('utf-8'))
    
    if __name__ == '__main__':
        ip_port = ('127.0.0.1', 8080)
        socketserver.TCPServer.allow_reuse_address = True  # 允许端口重用
        server = socketserver.ThreadingTCPServer(ip_port, MyServer)
        # 对 socketserver.ThreadingTCPServer 类实例化对象,将ip地址,端口号以及自己定义的类名传入,并返回一个对象
        server.serve_forever()  # 对象执行serve_forever方法,开启服务端
    
  • 相关阅读:
    React爬坑秘籍(一)——提升渲染性能
    (转)Chrome开发者工具不完全指南(一、基础功能篇)
    React-Todos
    webpack前端模块加载工具
    Python面试笔记二
    Python面试笔记一
    Python面试笔记四
    Python面试笔记三
    Mysql性能优化一
    公共的JS组件-告别CURD
  • 原文地址:https://www.cnblogs.com/yxwxy/p/10420549.html
Copyright © 2011-2022 走看看