Моя цель здесь - создать программу, которая позволит 2 различным типам клиентов подключаться к этому серверу. Если: клиент типа 1 (который является простым python клиентом) подключается, тогда «1234560043205123» будет передавать между ними. Если: тип клиента 2 (который является веб-страницей) будет обслуживаться. Это все работает на моей локальной машине.
Прямо сейчас, если я запускаю эту программу в визуальном коде, я вижу веб-страницу, но не связь, которая происходит между клиентом и сервером. Но если я запускаю это в CMD, я вижу связь между клиентом и сервером, но файл index. html, работающий на localhost, не загружается.
Проблемы, с которыми я сталкиваюсь:
объединение выходов различных клемм в одну клемму. Обе клеммы должны давать одинаковый выход. Я думаю, это из-за моего Venv в визуальном коде, но я не понимаю, почему вывод CMD также не отображается в выводе визуального кода ... (Визуальный код и CMD)
Отображение информация, передаваемая с клиента на сервер на моей веб-странице. Я выплюнул строку, исходящую от клиента, и хотел бы, чтобы это появилось на моей веб-странице. Я понимаю, как добавить переменную в 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