zoukankan      html  css  js  c++  java
  • 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()






  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/yangruizeng/p/5676038.html
Copyright © 2011-2022 走看看