Как определить разницу между заголовками и данными в сокете? - PullRequest
0 голосов
/ 01 июля 2019

Я использую python3, у меня есть скрипт на сервере, который получает UDP-запросы от клиента, а затем сервер переводит эти запросы в tcp и передает их внутренне в скрипт py на сервере.

Мой вопросМой сценарий tcp_to_udp на сервере знает, что первым запросом всегда являются заголовки, а затем данные.Как сделать так, чтобы в моем сценарии была разница между заголовками и данными?

Я хочу, чтобы мой скрипт знал, что такое данные и что такое заголовки, потому что теперь он знает только, что первый запрос - это заголовки, но этот метод не так хорош, если соединение возобновляется.

Также, если егомульти-соединение, чтобы узнать, какие заголовки подключены к каким данным.

мой скрипт сейчас (на сервере):

import json
import requests
import signal
import sys
import socket
from _thread import *

UDP_IP = ""
UDP_PORT = 5555

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.bind((UDP_IP, UDP_PORT))
print("Wating for connections")

def data_iter():
    while True:
        getInfo = data, addr = s.recvfrom(10000000024)
        print("My data:", data)
        yield(data)

headers = None
while headers is None:
    headers, addr = s.recvfrom(4024)
    if headers is not None:
        break
headers = headers.decode("utf-8")
headers = json.loads(headers)

try:
    r = requests.post('http://10.0.0.1:5001/stream', headers=headers, data=data_iter())
except socket.error as error:
    if error.errno == errno.EPIPE:
        print(os.strerror(error.errno))
    else:
        raise

тип данных: заголовки - это тип json, преобразованный в байты:

заголовки: b'{"RECORDER_NAME": "USB Audio OnBoard: #1 (hw:0,1)", "LZMA": "1", "RECORDER_RATE": "44100"}'

Мои данные: b'nanannananananna' # потому что я тестирую

...