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()






转载于:https://www.cnblogs.com/yangruizeng/p/5676038.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值