Ubuntu或者Windows10开启本地HTTP服务器的程序脚本

在 Ubuntu 上开启本地 HTTP 服务器有多种简单方法,如下:

一、开启方法

方法 1:使用 Python 内置模块(推荐)
Python 3(Ubuntu 默认自带:

# 进入目标目录(例如 ~/mysite)
cd ~/mysite

# 启动服务器(默认端口 8000)
python3 -m http.server

# 指定端口(如 9000)
python3 -m http.server 9000

# 允许局域网访问(监听所有接口)
python3 -m http.server 8000 --bind 0.0.0.0

Python 2(旧版兼容):

python -m SimpleHTTPServer 8000

方法 2:使用 PHP 内置服务器

# 进入目标目录
cd ~/mysite

# 启动服务器(默认端口 8000)
php -S localhost:8000

# 允许局域网访问
php -S 0.0.0.0:8000

方法 3:使用 Node.js http-server(需安装 Node.js)

# 安装 http-server
sudo npm install -g http-server

# 启动服务(进入目标目录后)
http-server -p 8000

方法 4:使用 Ruby 内置服务器

ruby -run -e httpd . -p 8000

访问服务器:

  • 本机访问:浏览器打开 http://localhost:8000
  • 局域网访问http://<你的IP>:8000(通过 ip a 查看本机 IP)

防火墙设置(如需允许外部访问):

# 允许端口 8000
sudo ufw allow 8000

终止服务器:
在终端按 Ctrl + C 即可停止服务。

适用场景对比:

方法优点缺点
Python无需安装,系统自带功能简单(仅静态文件)
PHP支持 PHP 动态页面需安装 PHP
Node.js功能丰富,支持实时刷新需安装 Node.js 和 npm
Ruby简单快捷需安装 Ruby

二、Python 测试脚本–打印get/post 信息

创建脚本 http_server.py

#!/usr/bin/env python3
from http.server import BaseHTTPRequestHandler, HTTPServer
import json
import cgi

class RequestHandler(BaseHTTPRequestHandler):
    def _log_request(self):
        """记录并打印所有请求信息"""
        print(f"\n{'='*50}\n收到 {self.command} 请求:")
        print(f"客户端地址: {self.client_address[0]}:{self.client_address[1]}")
        print(f"请求路径: {self.path}")
        print("请求头:")
        for key, value in self.headers.items():
            print(f"  {key}: {value}")
            
    def _send_response(self, message):
        """发送响应并记录"""
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        response = json.dumps({"status": "success", "message": message})
        self.wfile.write(response.encode('utf-8'))
        print(f"响应内容: {response}")

    def do_GET(self):
        """处理 GET 请求"""
        self._log_request()
        self._send_response("GET 请求已处理")

    def do_POST(self):
        """处理 POST 请求"""
        self._log_request()
        
        # 获取内容类型和长度
        content_type = self.headers.get('content-type')
        content_length = int(self.headers.get('content-length', 0))
        
        # 读取 POST 数据
        post_data = self.rfile.read(content_length)
        
        # 解析不同格式的数据
        if content_type == 'application/json':
            data = json.loads(post_data.decode('utf-8'))
            print("JSON 数据:", json.dumps(data, indent=2))
        elif content_type == 'application/x-www-form-urlencoded':
            data = dict(cgi.parse_qs(post_data.decode('utf-8')))
            print("表单数据:", data)
        elif content_type == 'multipart/form-data':
            form = cgi.FieldStorage(
                fp=self.rfile,
                headers=self.headers,
                environ={'REQUEST_METHOD': 'POST'}
            )
            data = {key: form[key].value for key in form}
            print("多部分表单数据:", data)
        else:
            print("原始数据:", post_data.decode('utf-8'))
        
        self._send_response("POST 请求已处理")

def run_server(port=8000):
    """启动服务器"""
    server_address = ('', port)
    httpd = HTTPServer(server_address, RequestHandler)
    print(f"服务器启动,监听端口 {port}...")
    print("支持 GET/POST 请求,按 Ctrl+C 停止")
    httpd.serve_forever()

if __name__ == '__main__':
    run_server(port=8000)

或者

#!/usr/bin/env python3
from http.server import HTTPServer, SimpleHTTPRequestHandler
from urllib.parse import urlparse, parse_qs
import json
import traceback

class CustomHandler(SimpleHTTPRequestHandler):
    # 禁用默认日志
    def log_message(self, format, *args):
        pass
    
    def handle_request(self):
        """处理请求并打印详细信息"""
        try:
            # 打印请求行
            print(f"\n----- {self.requestline} -----")
            
            # 打印请求头
            print("Headers:")
            for header, value in self.headers.items():
                print(f"  {header}: {value}")
            
            # 处理请求体
            content_length = self.headers.get('Content-Length')
            request_body = None
            
            if content_length:
                content_length = int(content_length)
                if content_length > 0:
                    request_body = self.rfile.read(content_length)
                    
                    # 尝试解析不同格式的请求体
                    content_type = self.headers.get('Content-Type', '').lower()
                    print(f"Body ({content_type}):")
                    
                    if 'application/json' in content_type:
                        try:
                            body_data = json.loads(request_body.decode('utf-8'))
                            print(json.dumps(body_data, indent=2, ensure_ascii=False))
                        except json.JSONDecodeError:
                            print(f"JSON解析失败: {request_body.decode('utf-8', errors='ignore')[:100]}...")
                    
                    elif 'application/x-www-form-urlencoded' in content_type:
                        body_data = parse_qs(request_body.decode('utf-8'))
                        print(json.dumps(body_data, indent=2, ensure_ascii=False))
                    
                    elif 'multipart/form-data' in content_type:
                        boundary = content_type.split('boundary=')[1].encode()
                        parts = request_body.split(boundary)
                        for i, part in enumerate(parts):
                            if part.strip():
                                print(f"  Part {i}: {part.decode('utf-8', errors='ignore')[:100]}...")
                    
                    else:
                        try:
                            print(request_body.decode('utf-8', errors='ignore'))
                        except UnicodeDecodeError:
                            print(f"二进制数据 (长度: {content_length} bytes)")
            
            # 根据HTTP方法分发处理
            if self.command == 'GET':
                self.handle_get()
            elif self.command == 'POST':
                self.handle_post(request_body)
            else:
                self.send_error(405, "Method Not Allowed")
                
        except Exception as e:
            print(f"处理请求时出错: {str(e)}")
            traceback.print_exc()
            self.send_error(500, "Internal Server Error")
    
    def handle_get(self):
        """处理GET请求"""
        # 解析URL路径和查询参数
        parsed_url = urlparse(self.path)
        path = parsed_url.path
        query_params = parse_qs(parsed_url.query)
        
        # 构建响应数据
        response_data = {
            "method": "GET",
            "path": path,
            "query_params": query_params,
            "message": "GET请求处理成功"
        }
        
        # 返回JSON响应
        self.send_json_response(200, response_data)
    
    def handle_post(self, request_body):
        """处理POST请求"""
        content_type = self.headers.get('Content-Type', '').lower()
        parsed_data = None
        
        # 解析请求体
        if 'application/json' in content_type and request_body:
            try:
                parsed_data = json.loads(request_body.decode('utf-8'))
            except json.JSONDecodeError:
                self.send_json_response(400, {"error": "无效的JSON格式"})
                return
                
        elif 'application/x-www-form-urlencoded' in content_type and request_body:
            parsed_data = parse_qs(request_body.decode('utf-8'))
        
        # 构建响应数据
        response_data = {
            "method": "POST",
            "path": self.path,
            "content_type": content_type,
            "data": parsed_data,
            "message": "POST请求处理成功"
        }
        
        # 返回JSON响应
        self.send_json_response(200, response_data)
    
    def send_json_response(self, status_code, data):
        """发送JSON格式响应"""
        try:
            json_data = json.dumps(data, ensure_ascii=False, indent=2).encode('utf-8')
            self.send_response(status_code)
            self.send_header('Content-Type', 'application/json; charset=utf-8')
            self.send_header('Content-Length', len(json_data))
            self.end_headers()
            self.wfile.write(json_data)
        except Exception as e:
            print(f"发送响应时出错: {str(e)}")
            self.send_error(500, "Failed to generate response")
    
    def do_GET(self):
        self.handle_request()
    
    def do_POST(self):
        self.handle_request()

if __name__ == '__main__':
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, CustomHandler)
    print('服务器运行中,端口: 8000')
    print('按 Ctrl+C 停止服务器')
    
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        print('\n服务器已停止')
        httpd.server_close()

脚本 http_server.py 赋权限。

Ubuntu 下 执行 脚本

./http_server.py
或者
python3 ./http_server.py

在这里插入图片描述

Windows10 下 执行 脚本

.\http_server.py
或者
 python .\http_server.py

打开 Windows PowerShell,进入脚本目录下,输入指令即可。
在这里插入图片描述

<think>好的,用户现在在Ubuntu系统下遇到了Ansys本地许可证服务器启动失败的问题,需要解决方案。首先,我需要回想之前提供的引用内容,看看有没有相关的解决方法。引用[1]中提到在Windows系统中删除某个环境变量或者代理设置,但用户现在用的是Ubuntu,所以可能需要类似的环境变量检查。引用[2]则提到了在Linux系统中通过编辑.bashrc或.bash_profile文件来添加环境变量,这可能在Ubuntu中适用。 接下来,我应该系统地整理可能的原因和解决方案。首先,许可证服务器的启动失败通常可能涉及几个方面:环境变量配置错误、许可证文件路径问题、权限不足、端口冲突、防火墙设置、服务未正确安装或者日志文件中的具体错误信息。 第一步,检查环境变量是否正确设置。根据引用[2],用户需要确认ANSYS的安装路径是否已正确添加到环境变量中。在Ubuntu中,这通常通过编辑~/.bashrc或~/.profile文件,并添加export命令。例如,export ANSYSLMD_LICENSE_FILE=1055@hostname,其中hostname应替换为实际的主机名。需要提醒用户检查是否正确设置了这些变量,并且是否在正确的配置文件中进行了添加,同时执行source命令使更改生效。 第二步,验证许可证文件的路径和内容。用户需要确认许可证文件是否存在,路径是否正确,并且文件内容中的主机名和MAC地址是否与当前系统匹配。许可证文件中的任何错误都可能导致服务器启动失败。特别是,如果用户最近更换了硬件或网络配置,MAC地址可能发生了变化,需要更新许可证文件。 第三步,检查文件权限。Ubuntu系统中,Ansys的相关文件和目录可能需要特定的读写权限。用户需要确保许可证文件和相关目录(如/usr/ansys_inc/shared_files/licensing)的权限设置正确,可能需要使用chmod或chown命令修改权限。 第四步,排查端口冲突。Ansys许可证服务器默认使用1055端口,如果该端口被其他应用程序占用,服务器将无法启动。用户可以使用netstat或lsof命令检查端口占用情况,并终止冲突进程或更改Ansys使用的端口。 第五步,检查防火墙设置。虽然Ubuntu的防火墙默认可能不会阻止本地流量,但用户如果配置了UFW或iptables规则,可能需要开放1055端口。需要指导用户如何临时禁用防火墙测试,或者添加规则允许该端口。 第六步,重新安装许可证管理服务。如果以上步骤无效,可能需要重新安装或重新配置许可证服务器。用户应进入Ansys的安装目录,运行脚本卸载并重新安装服务,确保所有步骤正确执行。 第七步,查看日志文件。Ansys的日志文件通常位于/usr/ansys_inc/shared_files/licensing/ansyslmd.log,检查其中的错误信息可以快速定位问题。用户需要打开日志文件,查找启动失败的具体原因,如许可证无效、权限被拒绝或端口冲突等。 此外,还需要考虑其他可能性,比如系统依赖库是否完整,是否有缺失的软件包,或者是否使用了不兼容的Ansys版本与Ubuntu系统版本。用户可能需要安装额外的依赖项,或者联系Ansys技术支持获取帮助。 在生成相关问题时,应该围绕常见的Ansys许可证问题展开,例如环境变量配置、许可证文件修复、端口冲突解决、日志分析以及系统兼容性等,帮助用户进一步排查可能的问题点。</think>### 解决方案:Ubuntu系统下Ansys本地许可证服务器启动失败 #### 1. 检查环境变量配置 在Ubuntu中,需确保Ansys许可证相关的环境变量已正确设置。编辑$~/.bashrc$或$~/.bash_profile$文件,添加以下内容: ```bash export ANSYSLMD_LICENSE_FILE=1055@<hostname> export ANSYS_PATH=/usr/ansys_inc ``` 替换$<hostname>$为实际主机名,保存后执行: ```bash source ~/.bashrc ``` #### 2. 验证许可证文件 检查许可证文件路径和内容: - 确认许可证文件路径:默认位于$ANSYS_PATH/shared_files/licensing/license.dat$ - 检查文件中的主机名和MAC地址是否与当前系统匹配: ```bash hostname # 查看主机名 ip link show # 查看MAC地址 ``` #### 3. 修复文件权限 确保许可证文件和目录的权限允许服务访问: ```bash sudo chmod 755 /usr/ansys_inc/shared_files/licensing sudo chmod 644 /usr/ansys_inc/shared_files/licensing/license.dat ``` #### 4. 检查端口冲突 使用以下命令检查1055端口是否被占用: ```bash sudo netstat -tuln | grep 1055 ``` 若端口被占用,终止冲突进程或修改Ansys配置文件中的端口号。 #### 5. 防火墙设置调整 若使用UFW防火墙,开放1055端口: ```bash sudo ufw allow 1055/tcp ``` #### 6. 重新安装许可证服务 进入Ansys安装目录,重新配置许可证服务: ```bash cd /usr/ansys_inc/shared_files/licensing sudo ./ansysli_server install # 重新安装服务 sudo systemctl restart ansysli_server # 重启服务 ``` #### 7. 查看日志定位问题 检查日志文件$ansyslmd.log$中的错误信息: ```bash tail -f /usr/ansys_inc/shared_files/licensing/ansyslmd.log ``` 常见错误示例: - `Invalid license key`:许可证文件内容错误 - `Permission denied`:文件权限不足 - `Port already in use`:端口冲突 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值