2009-12-17 4 views
0

Pour une raison quelconque, mon serveur arrête de fonctionner dans la zone marquée de mon code, et je n'arrive pas à comprendre pourquoi.Mon serveur Java s'arrête au milieu de son code

import java.net.*; 
import java.io.*; 

public class SlickServer{ 
    public static void main(String[] args) throws IOException { 

     int MAX_PLAYERS = 3; 
     int playerNum = 0; 
     Player[] players = new Player[MAX_PLAYERS]; 
     players[0] = new Player(25,25); 
     players[1] = new Player(125,125); 
     players[2] = new Player(225,225); 
     ServerSocket serverSocket = new ServerSocket(40); 
     boolean listening = true; 

     while(listening){ 
      System.out.println("Waiting to connect with: " + playerNum); 
      new ClientThread(serverSocket.accept(), players, playerNum).start(); 
      //stops here. 
      System.out.println("Connected with: " + playerNum + " Now incrementing"); 
      playerNum++; 
      System.out.println("Incremented to: " + playerNum); 
     } 



     serverSocket.close(); 
     System.exit(0); 
    } 
} 

Et est ici le fil:

import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.*; 
import java.io.*; 

public class ClientThread extends Thread implements Runnable{ 
    Socket acceptedSocket; 
    Player[] players; 
    int playerNum; 

    public ClientThread(Socket acceptedSocket, Player[] players, int playerNum){ 
     super("ClientThread"); 
     this.acceptedSocket = acceptedSocket; 
     this.players = players; 
     this.playerNum = playerNum; 
    } 

    public void run(){ 
     try{ 

      Socket clientSocket = acceptedSocket; 
      System.out.println("Accepted. Now creating I/O."); 
      ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream()); 
      ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream()); 
      System.out.println("I/O with: " + playerNum + " working."); 
      out.writeInt(playerNum); 
      out.flush(); 
     } 

     catch(Exception e){ 
      e.printStackTrace(); 
      System.exit(1); 
     } 


    } 

    public void start(){ 
     run(); 
    } 

} 
+0

Ceci n'est pas une réponse à votre question, juste un commentaire. Si vous écrivez votre propre serveur juste pour apprendre à le faire, alors continuez. Si vous essayez de faire quelque chose, vous pouvez envisager quelque chose comme ceci: http://jboss.org/netty – z5h

+0

Est-ce que ça plante? Si vous retournez un try/catch autour de la ligne 'new ClientThread (...)', obtenez-vous une exception? – Seth

Répondre

8

Le code dans votre "thread client" est en fait en cours d'exécution sur votre thread principal. C'est parce que vous avez écrit votre propre implémentation de start qui ne génère pas un nouveau thread.

Vous ne voulez pas faire cela.

+0

Qui l'a réparé, merci^_ ^ – William