python网络编程socket示例

该文章展示了一个使用Python的socket库创建简单Web服务器的过程。服务器解析HTTP请求,根据URL调用对应的函数生成动态HTML内容,例如index和test页面,并将替换占位符后的HTML文本以字节形式回送给浏览器。
摘要由CSDN通过智能技术生成

python网络编程socket示例

  1. 简单示例说明web开发框架的运行方式

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

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

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

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

  1. 程序流程

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

(1)server.py

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 func404(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 = func404
        
	rep = func(url)        
    conn.send(rep) 
    conn.close()

(2)index.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>

(3)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>test</title>
</head>
<body>
    <h1>$@test@$</h1>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

快乐江小鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值