首页 > 解决方案 > 如何制作一个简单的 Python 文本服务器

问题描述

我正在尝试制作一个提供字符串的网络服务器。是的,就是这样,只是字符串,没有变量,没有 CSS。问题是刷新。假设字符串每秒都在变化,存储在 Python 变量中。问题是为客户端提供服务,我想让客户端不必再次请求页面,而是服务器在每次更新时发送新字符串。

我试过 Cherrypy,但使用的方法是返回一个,它退出一个循环。如何制作这个“简单”的网络服务器?对套接字编程也真的很陌生.. 昨天刚听到这个词.. 编辑:我认为它应该由 HTML 提供.. 我希望它能够通过浏览器打开编辑:我认为伪代码应该是这样的

def loopingfunction:
    do things
    return var
def server:
    while True:
         displayed_text=loopingfunction()
         send_displayed_text_to_client()

标签: pythonservercherrypy

解决方案


不是cherrypi实现的解决方案,但如果我的问题是正确的,这里有一个基本的实现和解释:

import time, socket, sys
 
socket_server = socket.socket()
server_host = socket.gethostname()
ip = socket.gethostbyname(server_host)
sport = 8080
 
print('This is your IP address: ',ip)
server_host = input('Enter friend\'s IP address:')
name = input('Enter Friend\'s name: ')
 
 
socket_server.connect((server_host, sport))
 
socket_server.send(name.encode())
server_name = socket_server.recv(1024)
server_name = server_name.decode()
 
print(server_name,' has joined...')
while True:
    message = (socket_server.recv(1024)).decode()
    print(server_name, ":", message)
    message = input("Me : ")
    socket_server.send(message.encode()) 

首先,我们导入这个socket库,因为这个 python 库包含实现套接字的必要函数。该sys库提供了系统模块,该模块负责提供与系统目录、函数和方法相关的数据。该time模块使我们能够对时间的转换和描述执行许多操作。

该端口被指定为 8080。选择该端口是因为在大多数机器上这是一个默认的免费端口。

传入连接的详细信息存储在 client_name 变量中。客户端名称最长为 1024 字节。

用户输入消息。这是使用 encode() 编码的,然后通过套接字发送。使用 send() 函数发送消息,该函数在之前调用 accept() 函数期间创建的连接对象上调用。然后显示“消息已发送……”。

使用 conn 对象的 recv() 接收传入消息。它最多可以接收 1024 字节的信息。消息在服务器端使用 decode() 解码


推荐阅读