• socket(二)


    作用域

    1
    2
    3
    if 1 == 1:
     ​   name = 'alex'
    print(name)
    python中是没有块儿作用域的,所以python可以输出name
    java/c中有块级作用域,提示name没有定义
    Python中无块级作用域
    1
    2
    3
    4
    # if 1 == 1:
    #     name = 'alex'
    # print(name)
    #输出结果为alex
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # for i in range(10):
    #     name = i
    # print((name))
    #输出结果为:9
     
    # def func():
    #     name = 'alex'
    # func()
    #
    # print(name)
    #执行结果报错:name is notdefined
    #Python中是由作用域链的,找变量的时候是由内向外找,知道找不到报错。
    #提示:Python的作用域在执行前已经确定。  函数未执行前作用域链就已经确定了
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    name = 'alex'
     
    def f1():
        print(name)
     
    def f2():
        name = 'eric'
    """
     
    """
    name = 'alex'
     
    def f1():
        print(name)
     
    def f2():
        name = 'eric'
        return f1
    ret = f2()
    ret()
     
    """
     
    """
    li = [lambda :x for x in range(10)]
    r = li[0]()
    print(r)
    #li是列表
    #li列表中的元素:【函数,函数,函数。。。。】
    #函数在没有执行前,内部代码不执行
    #?li[0],函数
    #?函数()
    #返回值是???
    python2中默认经典类,如果继承object()是新式类
    python3中默认新式类

    I/O多路复用

    ​server端:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import socket
    import select
     
    sk = socket.socket()
    sk.bind(('127.0.0.1', 9999,))
    sk.listen(5)
     
    inputs = [sk, ]
     
    while True:
        rlist, w, e = select.select(inputs,[],[],1)
        #inputs:列表中存放sk,和conn对象,如果有新连接请求过来,sk对象就会变化,rlist就等于sk,
        #如果是已经建立的连接,发过来消息,返回的就是conn的对象
        print(rlist)
        # 监听sk(服务器端)对象,入股osk对象发生变化,表示客户端来连接了,此时rlist值为[sk]
        # 监听conn对戏那个,如果conn发生变化,表示客户端有新消息发送过来了,此时rlist的值为[客户端]
        # rlist = [wuwenyu,]
        # rlist = [zhanglei, ]
        # rlist = [sk]
        # rlist 中socket对象列表,[sk,]
     
        for r in rlist:
            if r == sk:
                #新客户来连接,则建立新的conn,把conn加入到inputs列表中
                #如果r != sk,则是已经建立连接的对象,conn,那么conn接收消息。
                conn, address = r.accept()
                #conn是什么? 其实就是socket对象
                inputs.append(conn)
                conn.sendall(bytes('hello', encoding='utf-8'))
                #rlist = [sk,], rlist =[sk1,],rlist = [sk1,sk2]
                #rlist = []
            else:
                #有人给我发消息了
                r.recv(1024)

    client端:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import socket
     
    sk = socket.socket()
    sk.connect(("127.0.0.1", 9999, ))
     
    data = sk.recv(1024)
     
    print(data)
     
    while True:
        inp = input(">>>")
        sk.sendall(bytes(inp, encoding='utf-8'))
    sk.close()






  • 相关阅读:
    TongJI Online Judge预赛(3): Game
    堆栈小应用:配对
    在.net中使用Udp协议创建简单的聊天程序
    TongJI Online Judge预赛(2): LOVE LETTER
    全排列问题之递归求解
    如何打造RSS阅读器
    Html 常用标志总结
    实现页面的分帧显示
    每天OnlineJudge之 “数素数”
    文本编辑器中,如何设计 撤销/重复栈
  • 原文地址:https://www.cnblogs.com/yangruizeng/p/5676038.html
Copyright © 2020-2023  润新知