文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

zero python.2

2023-01-31 02:11

关注

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 python
# coding: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())


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯