在下面的代码中,我相信我能够让 TCP 服务器与 Flask 应用程序一起运行,但是当我运行仅连接和侦听的测试客户端应用程序时,我收到“ConnectionRefusedError 61”。
如果我让 Flask 应用程序运行,然后单击我的表单按钮之一,我也会收到错误,提示“conn 未定义”。
最终目标:拥有一个 Flask 应用程序,可以通过 TCP 或 Websockets 向网络上的另一台计算机发送消息。我首先尝试 TCP 的原因首先是与 Websockets 相比比较熟悉,其次我找不到与 Python 3 兼容的 Flask Websockets 框架,而我们所做的一切都是在 Python 3 中,所以如果我可以避免管理 2 个版本Python,那就少了一件需要考虑的事情。我愿意接受其他建议。
客户端和服务端代码如下:
服务器:
from flask import Flask, render_template, request
import random, socket, threading
#tcp server
TCP_IP = '127.0.0.1'
TCP_PORT = 7005
BUFFER_SIZE = 20
def launchServer():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
print('waiting for connection')
conn, addr = s.accept()
print ('Connection address:', addr)
#flask app
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
if request.form['submit'] == 'button1':
conn.send(b'button1')
return "Random number between 1 and 10: " + str(random.randint(1,10))
elif request.form['submit'] == 'button2':
conn.send(b'button1')
return "Random number between 11 and 1000: " + str(random.randint(11,1000))
else:
pass
if request.method == 'GET':
return '''
<title>What would you like to do?</title>
<form action="" method="post">
<br><br>
<input type="submit" name="submit" value="button1">
<br><br>
<input type="submit" name="submit" value="button2">
</form>
'''
if __name__ == "__main__":
app.run(debug=True)
t = threading.Thread(target=launchServer)
t.daemon = True
t.start()
Run Code Online (Sandbox Code Playgroud)
客户端应用程序:
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 7004
BUFFER_SIZE = 20
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
while 1:
data = s.recv(BUFFER_SIZE)
if not data: break
print ('received data: ', data)
s.close()
Run Code Online (Sandbox Code Playgroud)