我對線程領域還不熟悉,而且我正在製作遊戲服務器,將連接到另一個線程的每個客戶端分配,以便我可以在同一端口上接受多個客戶端。但是,我在連接到服務器的客戶機上遇到問題,但無法發送數據(以ObjectOutputStream的格式發送到服務器)。任何可能出錯的指針?多線程服務器不接受客戶端輸出流
這是我爲我的MatchmakingServer.java
try {
listenForPlayers = new ServerSocket(portNumber);
System.out.println("Port opened. Searching for players");
while (true){
Socket clientSocket = listenForPlayers.accept();
Runnable r = new PlayerHandlerForServer(clientSocket);
new Thread(r).start();
}
} catch (Exception e) { }
我PlayerHandler對象實現Runnable,這裏是它的run方法的代碼。
private Player player;
private ObjectInputStream getPlayerData;
private static PrintWriter sendPlayerData;
private Socket socket;
public void run() {
try {
getPlayerData = new ObjectInputStream(socket.getInputStream());
player = (Player) getPlayerData.readObject();
//do stuff with the player object, this code get executed.
sendPlayerData = new PrintWriter(socket.getOutputStream(),true);
updatePlayersFound(sendPlayerData);
} catch (Exception e) { }
}
'catch(Exception e){}' - 爲什麼忽略異常?你不會開着蒙上眼睛的車,你會嗎? –
oops。我有一位朋友看我的代碼,他說默認的e.printStackTrace()沒有做任何事情,但我猜測它沒有。我發現我的錯誤(玩家不可序列化)。感謝您指出了這一點! – Narabhut
我強烈建議您將來不要使用同一個朋友作爲Java資源。他的建議非常危險。 –