【发布时间】:2020-01-18 05:59:12
【问题描述】:
我有一个 Flask 服务器,它当前显示一个 JSON 文件。我希望同一台服务器通过套接字接收数据流并将其保存到 JSON。
在堆栈溢出答案的帮助下,我已经起草了基础知识,但是当从客户端发送数据时,会抛出 404 message 并且没有运行代码来处理数据(在示例中打印 call decoding)。
服务器
from flask import Flask, json, Response
import os
import socket
import threading
app = Flask(__name__)
server_address = ('', 5001)
@app.route('/')
def index():
filename = os.path.join(app.static_folder, 'data.json')
with open(filename) as data:
data = json.load(data)
return Response(json.dumps(data), mimetype='application/json')
def launch_socket_server():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(server_address)
sock.listen(1)
print('Listening...')
while True:
#Wait for connection
connection, address = sock.accept()
print('Connected', address)
try:
#Receive data
while True:
data = connection.recv(16)
print(data)
if data:
print('call decoding')
finally:
#Clean up connection
connection.close()
if __name__ == "__main__":
t = threading.Thread(target=launch_socket_server)
t.daemon = True
t.start()
app.run(debug=True, host='0.0.0.0', port=5000, use_reloader=False)
客户
import socket
server_address = ('', 5001)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(server_address)
data = 'Ciao Daniela'
s.sendall(data.encode('utf-8'))
s.close()
服务器控制台错误
127.0.0.1 - - [17/Sep/2019 13:39:35] code 400, message Bad HTTP/0.9 request type ('Ciao')
127.0.0.1 - - [17/Sep/2019 13:39:35] "Ciao Daniela" HTTPStatus.BAD_REQUEST -
【问题讨论】:
-
您是否在控制台/终端中运行它以查看错误消息?据我所知,系统无法运行具有相同端口的两个套接字,而 Flask 使用端口 5000 的一个套接字,而您尝试使用端口 5000 运行第二个套接字。在我的计算机上,我收到此地址:端口已被使用的错误,它可以'不创建套接字。
-
是的,没错,我刚用 5000 和 5001 试过,效果很好。
-
@furas 我在使用同一个套接字时没有收到该错误。如果我使用 5000 然后 5001 我得到错误 61 连接被拒绝。
-
您在企业防火墙后面的 Windows 上吗?在浏览器中使用正确的端口尝试 127.0.0.1。
-
使用
server_address = ('127.0.0.1', 5000)通过客户端发送对我有用。使用server_address = ('', 5000)我收到消息WinError 10049: The requested address is not valid in its context.
标签: python python-3.x sockets flask