[英]Multithreaded server not accepting client outputstream
我對線程世界有點陌生,我正在制作一個游戲服務器,分配連接到另一個線程的每個客戶端,以便我可以在同一端口上接受多個客戶端。 但是,客戶端連接到服務器時遇到問題,但是無法發送數據(以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) { }
}
如注釋日志中指出的那樣,這些異常將提供有關可能導致此問題的線索。
一個瘋狂的猜測是您的Player類沒有實現Serializable接口。
我想知道為什么您要從Socket讀取序列化的對象,卻使用PrintWriter寫入數據。 我建議使用ObjectOutputStream並保持一致。
發送序列化的對象可能會過大。 可能有更多的數據要發送,然后您才在乎。 這可能對您的游戲客戶端造成無用的網絡延遲! 您可能想看看使用DataInputStream / DataOutputStream。 這將允許您僅使用真正必要的對象來編寫/讀取對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.