Обслуживание html страницы с использованием flask python с использованием информации, поступающей с 2 ​​устройств - PullRequest
0 голосов
/ 22 января 2020

Моя цель здесь - создать программу, которая позволит 2 различным типам клиентов подключаться к этому серверу. Если: клиент типа 1 (который является простым python клиентом) подключается, тогда «1234560043205123» будет передавать между ними. Если: тип клиента 2 (который является веб-страницей) будет обслуживаться. Это все работает на моей локальной машине.

Прямо сейчас, если я запускаю эту программу в визуальном коде, я вижу веб-страницу, но не связь, которая происходит между клиентом и сервером. Но если я запускаю это в CMD, я вижу связь между клиентом и сервером, но файл index. html, работающий на localhost, не загружается.

Проблемы, с которыми я сталкиваюсь:

  1. объединение выходов различных клемм в одну клемму. Обе клеммы должны давать одинаковый выход. Я думаю, это из-за моего Venv в визуальном коде, но я не понимаю, почему вывод CMD также не отображается в выводе визуального кода ... (Визуальный код и CMD)

  2. Отображение информация, передаваемая с клиента на сервер на моей веб-странице. Я выплюнул строку, исходящую от клиента, и хотел бы, чтобы это появилось на моей веб-странице. Я понимаю, как добавить переменную в html, используя "{{varibale_name}}". Я также проверил с постоянной переменной, и она работает, но не публикует переменные из потоковой функции. (индекс. html)

Я разместил фотографии 2 выходов


#import flask
from flask import Flask, render_template
from datetime import datetime
import os
import math 

# import socket programming library 
import socket 

# import thread module 
from _thread import *
import threading 


app = Flask(__name__) 

uid = ''
speed = ''
time = ''
trainid = ''

@app.route('/')
def index():
    """Renders the home page."""
    return render_template(
        'index.html',
        title='Home Page',
        year=datetime.now().year,
        uid1 = uid,
        speed1 = speed,
        time1 = time,
        trainid1 = trainid,
    )

# thread function 
def threaded(c): 
    while True: 

        # data received from client 
        data = c.recv(1024) 

        #view data received 
        viewdata = str(data.decode('ascii'))
        print(viewdata)

        #break data down
        uid = viewdata[0:5]
        speed = viewdata[5:7]
        time = viewdata[7:13]
        trainid = viewdata[13:16]
        #print(uid)
        #print(speed)
        #print(time)
        #print(trainid)
        return uid, speed, time, trainid, threaded(c);

        #if data is not received/end function
        if not data: 
            print('Bye') 

            # lock released on exit 
            print_lock.release() 
            break

        # send back acknowledge to client 
        if len(viewdata) == 16:
            ack = 'ack'
            c.send(ack.encode('ascii')) 

    # connection closed 
    c.close() 

def Main(): 

    #define for sockets for clients
    host = "127.0.0.1" 

    port = 5001
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.bind((host, port)) 
    print("socket binded to port", port) 

    # put the socket into listening mode 
    s.listen(5) 
    print("socket is listening") 

    # a forever loop until client wants to exit 
    while True: 

        # establish connection with client 
        c, addr = s.accept() 

        # lock acquired by client 
        #print_lock.acquire() 
        print('Connected to :', addr[0], ':', addr[1]) 

        # Start a new thread and return its identifier 
        start_new_thread(threaded, (c,)) 
    s.close() 


if __name__ == '__main__': 
    threads = [threading.Thread(target=Main()), threading.Thread(target=app.run(host="127.0.0.1",port=5000) )]
    for th in threads:
         th.start()
         print(f'threads {th} started')
         th.join(0.1)

[1]Image for when my program runs using Visual Code[2]Image for when my program runs using CMD


  [1]: https://i.stack.imgur.com/MJ2iY.png
  [2]: https://i.stack.imgur.com/WM43j.png
...