2013-07-09 28 views
0

我在這裏完全損失。我昨天整夜都試圖弄清楚我的代碼到底是什麼地方出了問題,但現在我想我的計算機上實際上有一點小小的瑕疵,在CPU上啃着。我用這個系列教程沿着如下:Java遊戲網絡不穩定的錯誤

http://www.youtube.com/watch?v=l1p21JWa_8s&list=ELp5mgUw5g9EY

,直到我決定暫停它,使自己的自定義數據包類。它工作得很好,但之後一些非常奇怪的事情開始發生。基本上,發生的事情是客戶端和服務器之間發送的數據在收到時發生混亂(我確認數據在發送前是正確的)。這發生在看似隨意的點,現在我感到困惑,

例如我行:

System.out.println(m_Game.m_aConnectedPlayers[ intPlayerID ].GetUserName() + " has joined."); 

,並把它改成

System.out.println(m_Game.m_aConnectedPlayers[ intPlayerID ].GetUserName() + "(" + intPlayerID + ") has joined."); 

包括玩家ID,然後當我用第三個客戶端連接到服務器時,數據包數據變得越來越混亂。此外,即使我打字時,我決定返回並再次測試,並且錯誤停止發生。我會授予+100個互聯網點給誰以某種方式解決這個問題。這裏是我的整個項目(原諒我的亂碼) http://www.mediafire.com/?9w6god1cjsnwbnf

+3

「我會授予+100個互聯網點」與問題無關,不可能沒有獎勵。也請粘貼每個的輸出。 – hexafraction

+1

*「我跟着本教程系列: http:www.youtube ...」*當人們似乎認爲他們可以通過觀看視頻來學習編程時,我感到非常驚訝。 :-( –

+0

)您是否在線上嗅探了數據?(wireshark/Fiddler)還有代碼託管在哪裏? –

回答

0

我不知道你的問題可能是什麼,但我有問題,做同樣的事情:

如果您使用的ObjectOutput /的ObjectInput請務必在每次寫入後調用reset方法。對象輸出只能在重置之間寫入一個對象,所以如果您發送它,更改值並重新發送,另一端將只接收舊值。發送整個對象圖是一種巧妙的方式,但它會讓你想要做的事情變得糟糕。

如果您使用多個多線程編寫代碼,很可能它們沒有按您認爲的順序運行。