1
我通過TCP在python中發送緊急數據時遇到問題。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)
OK,收到數據。
但我怎麼能指出,當我發送週期數據時,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()
如果客戶試圖用 '數據= conn.recv(BUFFER_SIZE,MSG_OOB)' 接收所有的數據 - 沒有什麼作品。 我還沒有找到任何方式來使用SELECT或像SIGURG一樣解決問題。
以防萬一你不知道,TCP OOB數據被稱爲是不可靠的,破碎和不兼容的實現不同的操作系統。這就是爲什麼沒有人使用它,反過來這就是爲什麼沒有人關心修復它。 – rodrigo