我有一個程序在c + +中發送一個23723字節的插口在一個「鏡頭」的Flash播放器。重新組合拆分TCP數據包與閃存套接字
Flash播放器有時接收大小17520和6203,其它時候的兩個分組接收23723.
EDIT的單個分組:似乎沒有成爲一個方式,以獲得相關聯的字節的總數與從閃光燈發送數據。這將使得構建重建「破損」分組的循環變得非常困難。
我認爲TCP應該正確地重新組合數據包,並且我自己很難重組它們。
這是我的閃光接收處理程序:
var socket:Socket = new Socket();
socket.addEventListener(Event.CONNECT, socketConnectHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataReceivedHandler);
socket.connect("127.0.0.1", 7445);
socket.writeUTFBytes("hi");
private function socketDataReceivedHandler(event:ProgressEvent):void {
var socket:Socket = event.target as Socket;
trace(socket.bytesAvailable);
var data:ByteArray = new ByteArray();
socket.readBytes(data);
}
命令:
trace(socket.bytesAvailable);
將在次打印23723,並在其他時間,將打印17520緊接着6203總大小僅僅是示例,並且每個發送套接字都可能會發生更改。同時還可以發送或接收多個套接字,因此分組數據包可以相互混合。在C++中,我可以確定發送數據的總大小,即使我沒有收到全部發送的數據。
否 - TCP不處理數據包。它只給你一個字節流。你應該首先寫入數據的大小,這樣你的閱讀結束就知道要讀取多少數據。或者,如果您始終發送固定數量的字節,請讓您的閱讀結束循環,直到閱讀全部內容。 – nos 2011-05-20 19:04:26