Python网络编程

Python网络编程

  1. python的特点
  • 具有解释性、交互性、面向对象三个特征;
  • 语法简单,关键字较少,结构简单;
  • 跨平台,可移植性好;
  • 提供了主流的数据库接口,比如mysql、mongodb、redis。
  1. Web开发基础知识
  • web服务的本质是由socket服务端向socket客户端提供HTTP响应,浏览器相当于一个socket客户端,向服务端发出请求。web应用主要做的事情就是发送HTML文件到浏览器,核心功能通过socket服务完成。
  1. 简单实例模拟web框架运行方式

(1)创建index.html和test.html,作为访问的资源;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
</head>
<body>
    <h1>$@index@$</h1>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
</head>
<body>
    <h1>$@test@$</h1>
</body>
</html>

(2)根据传入的参数,读取响应的HTML文件,并根据占位符进行替换实现网页动态显示。

import socket 

def index(url):
    with open('index.html', 'r', encoding='utf-8') as f:
        rd = f.read()
        rd = rd.replace("$@index@$", "首页")
        return bytes(rd, encoding='utf-8')

def test(url):
    with open('test.html', 'r', encoding='utf-8') as f:
        rd = f.read()
        rd = rd.replace("$@test@$", "测试")
        return bytes(rd, encoding='utf-8')

def fun404(url):
    ret = "<h1>not found!</h1>"
    return bytes(ret, encoding='utf-8')

url_func = [  # 建立url与函数名的对应关系
    ('/index/', index),
    ('/test/', test)
]

# 建立socket服务,测试http://127.0.0.1:8000/index/
sk = socket.socket() 
sk.bind(('127.0.0.1', 8000)) 
sk.listen() 
print('socket服务开始运行...')
while True:
    conn, addr = sk.accept() 
    data = conn.recv(1024) 
    #print(data) # 输出socket服务端接收的浏览器发送的消息
    # 如果客户端没有发送新的数据就重新开始,不再向下执行,防止后面语句对空字符进行操作抛出异常
    if not data: 
        continue

    data_str = str(data, encoding='utf-8')
    line = data_str.split('\r\n') 
    v1 = line[0].split()
    url = v1[1]
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n")  
    func = None 
    for i in url_func: # 取出url_func中的每一项
        if i[0] == url:
            func = i[1]
            break 

    if func:
        func = func 
    else:
        func = fun404
    
    rep = func(url)
    conn.send(rep) # 把函数返回值向客户端发送
    conn.close()

(3)测试结果

​ 在浏览器中分别输入http://127.0.0.1:8000/index/http://127.0.0.1:8000/test/可以得到各自的影响结果。

  1. socket服务实现

(1)建立socket服务,绑定IP地址和端口号,启动监听进程并把本地计算机设置成socket服务端;

(2)服务启动后,通过循环语句,持续接收浏览器发送的信息;

(3)socket服务器与浏览器以字节形式在网络上传递信息,发送字符串之前必须要转换成字节形式;

(4)socket服务端与浏览器的消息传递必须要按照HTTP格式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江小鱼

知识创造财富,余额还是小数

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值