我們使用AS3 Event:ProcessEvent.SOCKET_DATA來偵聽套接字數據。 所以這是我的套接字數據句柄的AS3代碼。AS3 Socket ProcessEvent.SOCKET_DATA似乎未觸發
private function packetHandler(e:ProgressEvent):void
{
while(m_socket.bytesAvailable && m_socket.bytesAvailable >= pLen)
{
//pLen means the packet length
//pLen init is zero
if(pLen == 0)
{
//PACKET_LEN stands for the solid length of one packet
//PACKET_LEN = HEAD_LEN + 4
//the 4 means an unsigned int which means the packet content length
if(m_socket.bytesAvailable > PACKET_LEN)
{
m_socket.readBytes( headByteBuffer, 0, HEAD_LEN);
headByteBuffer.clear();
pLen = m_socket.readUnsignedInt() + 4;
}
else
{
break;
}
}
//recieved a whole packet now handle it
else
{
var newPacket:ByteArray = new ByteArray();
newPacket.endian = Endian.LITTLE_ENDIAN;
m_socket.readBytes(newPacket, 0, pLen);
parasMsg(newPacket, pLen-4);
pLen = 0;
}
}
}
一個整個數據包可以在這張照片描述:
我的問題是:當有閃光收到一個不完整的數據包並觸發手柄。 但是數據包的左側部分永遠不會觸發句柄,而且看起來數據包的左側部分已經丟失!
我用了一個捕獲工具,發現tcp數據包沒問題,但是爲什麼左邊的部分不再觸發事件呢?
您可以在下面獲得更多調試信息。謝謝!
這是我的日誌:
- byteava裝置m_socket的信息bytesAvailable
==>了sendpacket:{ 「rangeID」: 「1」, 「UID」:「145962 」, 「的serviceType」: 「copyscene」, 「CMD」: 「CopySceneMoveAsk」, 「pathPoint都由」:[{ 「欄」:7, 「行」:6},{ 「欄」:7, 「行」:5} ,{ 「欄」:7, 「行」:4},{ 「欄」:7, 「行」:3},{ 「欄」:6, 「行」:3}], 「SN」:「79 」, 「smallPathPoint」:[[22,19],[22,18],[22,17],[22,16],[22,15],[22,14],[22,13],[ 21,13],[21,12],[21,11],[20,11],[20,10]]},bytesLoaded = 46 3
ProgressEvent觸發0插座byteava = 373 EVT加載:373 EVT總數:0 EVT:[ProgressEvent類型= 「socketData」 氣泡=假或取消=假的EventPhase = 2的bytesLoaded = 373 BYTESTOTAL = 0]
從socket中找到一個包,pLen = 288 socket byteava = 276
ProgressEvent Triggered!288 socket byteava = 441 evt loaded:165 evt total:0 evt:[ProgressEvent type =「socketData」bubbles = false cancelable = false eventPhase = 2 bytesLoaded = 165 bytesTotal = 0]
開始讀取數據包到緩衝區,pLen = 288 socket byteava = 441
整個數據包內容:Readed分組緩衝,PLEN = 288插座byteava = 153
服務器數據包內容字節緩衝器AVA:288 LEN:288個POS:0
服務器傘兵數據:數據長度: 284數據內容:{「cmd」:「CopySceneMoveNotify」,「gtcmd」:「108」,「layer」:「1」,「pathPoint」:[{「col」:7,「row」:6},{欄 「:7,」 行 「:5},{」 欄 「:7,」 行 「:4},{」 欄 「:7,」 行 「:3},{」 欄 「:6,」 行」 :3}], 「smallPathPoint」:[[22,19],[22,18],[22,17],[22,16],[22,15],[22,14],[22,13 ],[21,13],[21,12],[21,11],[20,11],[20,10] HTTP/1.1 200
_[20,10]HTTP/1.1 200_
這是哪裏出錯了!不完整的數據包貓與另一個數據包的頭部。
這裏是TCP連接的捕獲:
希望你能投上一票,這樣我可以把我在這個問題上的照片!
我的英文不太好,希望你能明白我的意思。 謝謝!
爲什麼e的類型是ProgressEvent? – 2013-03-04 15:08:16
ProgressEvent.SOCKET_DATA – Tim 2013-03-04 15:36:37
我幾乎可以肯定問題在於packetHandler,特別是在使用時。我的遊戲是服務器/客戶端,通信是通過套接字從來沒有這樣的問題。另外我幾乎如果你改變m_socket.readBytes(newPacket,0,pLen); to m_socket.readBytes(newPacket,0,m_socket.bytesAvailable);你將得到沒有HTTP/1.1的消息200_ – 2013-03-04 15:51:22