У меня проблема с отправкой срочных данных в python через TCP.
Я изучил структуру заголовка TCP и механизм внеполосной передачи данных, но до сих пор не могу понять, как реализовать этот простой сервер.
:
#default steps
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn,addr = s.accept()
...
#oob
conn.send('!',MSG_OOB)
...
простой клиент:
...
data = conn.recv(BUFFER_SIZE,MSG_OOB)
ОК, данные получены.
Но как я могу указать, что информация OOB пришла клиенту, когда я отправляю данные в цикле?
Например:
serverFile = open(serverPath, 'rb')
while True:
fileBytes = serverFile.read(1000)
if not fileBytes: break;
try:
i += 1
if i % 1000 == 0:
print 'sending urgent..'
conn.send('!',MSG_OOB)
conn.send(fileBytes)
except socket.error, (value, message):
if conn:
conn.close()
serverFile.close()
print 'Error while sending data : error code - ' + str(value) + '; message: ' + message
exit(1)
serverFile.close()
Если клиент пытается получить все данные с помощью 'data = conn.recv (BUFFER_SIZE, MSG_OOB)' - ничего не работает.Я не нашел способа использовать SELECT или что-то вроде SIGURG для решения проблемы.