1元成本用Python搭建一个小型广域网服务器

一、项目背景

我想用香橙派搭建一个小型的广域网服务器,发现需要组一个服务器,一年差不多要30元。我只是玩玩,经过一番寻找,找到了一个1元成本实现的方式。当然不包括香橙派的成本。

二、原理

需要一个广域网服务器,一个服务端,一个客户端,原理是广域网服务器与服务端映射绑定,客户端访问广域网服务器,广域网服务器把访问信息传送给服务端,服务端再把信息返回给广域网服务器,后者再把信息发送给客户端。

图形化表示如下:

服务端和客户端的脚本按照局域网的脚本来写。

三、材料准备

除了Python外,还需要准备Sakura Frp账号。具体步骤如下:

①访问Sakura Frp,点击“注册账号”

②按照要求注册账号

③返回步骤一的网站,点击“管理面板”

④在页面右上角的“每人签到”中可以领取流量,一天可以领导1-4GB

⑤点击顶栏中的“用户”->“实名认证”,认证信息。这里需要1元。因为《网络安全法》,不认证的话不能使用。此外,这里使用的1元是因为支付宝的原因(具体我也不清楚)。

⑥下载软件,点击顶栏的“服务”->“软件下载”,下载客户端

⑦在客户端需要登录,登录后需要配置隧道

这里选择表达和红圈中类似的。这种不支持浏览器访问(HTML/HTMLS协议),但是也可以用“奇技淫巧”达成浏览器访问的效果,这个我们后面细说。图中红圈中类的类型支持TCP协议、UDP、协议、WOL网络唤醒,按需要选择后,需要配置。

隧道名等不多说。如果你的服务端和本软件在一台电脑上,只需要设置本地端口了,否则需要设置IP地址和端口了。其他的按需要设置。

四、服务端Python脚本

这是一个简单的示例脚本,只能做一次应答。

from socket import *


if __name__ == "__main__":
    server: socket = socket(AF_INET, SOCK_STREAM)
    server.bind(("127.0.0.1", 8080)) #ip地址和端口需要和软件中设置的一致
    server.listen(128)
    while True:
        client, address = server.accept()
        recv_data: bytes = client.recv(1024)
        print(recv_data.decode("utf-8"))
        client.sendall(b"Hi!!!")

五、客户端Python脚本

同样,这是一个简单的示例脚本,只能做一次应答。

from socket import *


if __name__ == "__main__":
    client: socket = socket(AF_INET, SOCK_STREAM)
    client.connect(("122.228.26.226", 20584)) 
    #这里的ip地址和端口是在软件开启隧道后生成的,在软件“日志功能”里可以看到
    client.sendall(b"Hi!!!How Are You!!!")
    recv_data: bytes = client.recv(1024)
    print(recv_data.decode("utf-8"))

六、实现浏览器访问

6.1原理

再添加一个网页服务器,与上面的客户端在一个类或者代码段里面,浏览器访问网页服务器,网页服务器把网页请求信息发送给客户端,客户端发送给服务器,服务器把返回信息发送给客户端,客户端再发送给网页服务器,网页服务器再发送给浏览器。

图形化表达如下:

6.2服务端Python脚本

这是一个简单的示例脚本,返回一个网页

from socket import *


HTML: str = "HTTP/1.1 200 OK\ncontent-Type: text/html; charset=UTF-8\n\n" \
            "<html><title>测试页</title><body><h1>标题</h1><p>文本</p></body></html>"


if __name__ == "__main__":
    server: socket = socket(AF_INET, SOCK_STREAM)
    server.bind(("127.0.0.1", 8080)) #ip地址和端口需要和软件中设置的一致
    server.listen(128)
    while True:
        client, addr = server.accept()
        recv_msg: bytes = client.recv(1024)
        print(recv_msg)
        send_msg: bytes = HTML.encode("utf-8")
        client.sendall(send_msg)

6.3客户端和网页服务器Python脚本

这是一个简单的示例脚本,返回一个网页,写在一起,方便

from socket import *


if __name__ == "__main__":
    _web_socket: socket = socket(AF_INET, SOCK_STREAM)
    _web_socket.bind(("127.0.0.1", 10203)) # 端口可以随机
    _web_socket.listen(1)
    while True:
        c, addr = _web_socket.accept()
        recv_data: bytes = c.recv(1024)
        client: socket = socket(AF_INET, SOCK_STREAM)
        client.connect(("122.228.26.226", 20584))
        send_msg: str = recv_data.decode("utf-8").split("\n")[0].replace("HTTP/1.1\r", "")
        client.sendall(send_msg.encode("utf-8"))
        # 这里的ip地址和端口是在软件开启隧道后生成的,再软件“日志功能”里可以看到
        # 在发送msg前,需要从msg中提取出访问地址(就是类似/index/1/123这样的,是发送他),
        recv_msg: bytes = client.recv(1024)
        print(recv_msg)
        c.sendall(recv_msg)
  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python搭建WebSocket服务器,需要使用WebSocket库和Python的内置Web框架(如Flask或Django)。以下是使用Flask的示例代码: 安装Flask和WebSocket库: ``` pip install flask pip install flask-sockets ``` 创建一个Flask应用程序: ``` from flask import Flask, render_template from flask_sockets import Sockets app = Flask(__name__) sockets = Sockets(app) @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': app.run() ``` 在上面的代码中,我们导入Flask和WebSocket库,创建Flask应用程序并创建套接字对象。我们还定义了一个基本路由来渲染模板。 接下来,我们需要将路由转换为WebSocket路由: ``` @sockets.route('/echo') def echo_socket(ws): while not ws.closed: message = ws.receive() ws.send(message) ``` 在上面的代码中,我们使用装饰器将路由转换为WebSocket路由。我们定义了一个循环来接收和发送消息。我们还可以添加其他逻辑和处理程序,以便在接收和发送消息时执行更多操作。 最后,我们需要将应用程序运行在WebSocket服务器上: ``` if __name__ == '__main__': from gevent import pywsgi from geventwebsocket.handler import WebSocketHandler server = pywsgi.WSGIServer(('localhost', 5000), app, handler_class=WebSocketHandler) server.serve_forever() ``` 在上面的代码中,我们使用`gevent`库来创建WebSocket服务器。我们定义了地址和端口,并指定了Flask应用程序和WebSocket处理程序。我们还启动了服务器并让它永远运行。 当您运行该应用程序时,您可以访问`http://localhost:5000/`并使用WebSocket客户端连接到`ws://localhost:5000/echo`,以便测试WebSocket服务器是否正在工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值