zero python.2

2023-01-31 02:01:44 python

1.使用函数 

2.装饰器 

3.异常处理 

4.Socket 


wKiom1imhcqyLOXMAABm6i-XhL0154.jpg

1.使用函数


  给函数传递参数时,可以灵活传递实参数量。形参在定义时,使用到列表、字典。

# 定义函数
def f (hostip, port='52161'):
    print('host is %s' %hostip)
    print('port is %s' %port)

# 调用函数
f('127.0.0.1')
f('localhost' , '3303')
f(port='123', hostip='129')
# 定义函数f
def f (*args):
    print('f', args)

# 调用函数f
f(1,3,5,7,9,1100)
f('1', '3', '5', '7', '9', '1100')
args = ['hongkong', 'qingtao', 'tokey']

f(args)
f(*args)

# 定义函数f2
def f2(**args):
    print('f2', args)

# 调用函数f2
f2(**{'hostname':'task', 'port':'52161'})
args={'hostname':'localhost', 'port':'52161', 'value':True}
f2(**args)



2.装饰器


  


2.1.嵌套函数

  

2.2.高阶函数

  


3.异常处理


  


4.socket


  网络上两个程序通过一个双向通信连接实现的数据交换,该连接的一端称为一个socket。一个socket是对tcp信息、ip信息的封装后用来为应用层服务的,是一个通讯的句柄。

4.1.python2.7

  模拟一个114问询台(2.7版本的程序实例):

服务器端
#!/usr/bin/env pythoncoding:utf-8
# Version:2.7

import socket

HOST = '10.10.14.9'     # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
print 'Listening...'
conn, addr = s.accept()
print 'connected...'

while True:
    data = conn.recv(1024)
    if data == "bye":
        conn.close()
        print 'client: Thanks.'
        break
    print "Client: " + data
    data = raw_input('server: ')
    conn.sendall(data)
# 客户端
#!/usr/bin/env Python
# coding:utf-8
# Version:2.7

import socket

HOST = '10.10.14.9'    # The remote host
PORT = 50007              # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

while True:
    client = raw_input('client: ')
    if client == 'bye':
        s.sendall(client)
        s.close()
        print 'server: Welcome'
        break
    s.sendall(client)
    data = s.recv(1024)
    print 'server: ' + data


4.2.python3.5

  这里讨论的socket网络层仅使用INET,传输层使用TCP。


4.2.1.web访问

  创建socket,当我们浏览网页Http://donatello.cc/时,就等于创建一个“客户端socket”。

cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cs.connect(('localhost', 8080))

cs.send(b'hello')
data = cs.recv(4096)

这里创建的套接字s,既是用于发送请求、同时也接受响应。客户端套接字通常存活于一个交换周期,就自动销毁。

  服务端的socket稍微复杂点

ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 仅仅监听了ipv4、tcp,使用()空白表示全都监听
ss.bind(('localhost', 8080)) #监听了本地的8080端口,‘’表示监听所有本地接口
ss.listen(15) # 15个以外的链接会被拒绝

while True:
    (clientsocket, address) = ss.accept()
    print('new connection: ', address)
    print('clientsocket.recv(): ', clientsocket.recv(4096))
    clientsocket.send(b'ack')

  使用socket通讯时,客户端仅仅使用了client-socket,服务端同时使用了server-socket、client-socket。通常由客户端的套接字来发起一个请求,从而在客户端、与服务端建立起一个对等的会话。会话建立后,就开始处理send、recv。当recv返回0字节时,说明另外一端已经关闭、或者正在关闭。

  服务端控制台:

C:\python36\python3.exe C:/Users/Administrator/PyCharmProjects/专题:socket/createServerSocket.py
new connection:  ('127.0.0.1', 4681)
clientsocket.recv():  b'hello'
new connection:  ('127.0.0.1', 4682)
clientsocket.recv():  b'hello'


4.2.2.ssh访问

  server端

server = socket.socket()
server.bind(('localhost', 221))
server.listen(10)

while True:
    conn, addr = server.accept()
    while True:
        data = conn.recv(1024)
        if not data:
            print('client is lost.')
            break
        print('cmd executing.')
        com_res = os.popen(data.decode()).read()
        conn.send(com_res.encode())

  client端

client = socket.socket()
client.connect(('localhost', 221))

while True:
    cmd = input('# ').strip()
    if 0 == len(cmd):
        continue
    client.send(cmd.encode('utf-8'))

    cmd_result = client.recv(1024)
    print(cmd_result.decode())


相关文章