Java中的多线程服务器 - 从其他计算机连接时出现连接超时异常

时间:2015-06-09 22:22:00

标签: java multithreading sockets client server

我的申请有问题。如果我在同一台计算机上运行服务器和客户端,它工作正常。没有错误。但是,如果我在一台PC上运行服务器,并尝试连接其他计算机,我会得到"超时异常"或者如果我设法连接,我会在发送数据时出错。

服务器代码(不是全部):

// server loop - listening for connections
public void runServer()
    {
        try {

            ServerSocket serverSocket = new ServerSocket(port, 10);            
            System.out.println("Server up.");
            while (true) 
            {
                System.out.println("waiting for new connection...");
                Socket socket = serverSocket.accept();
                System.out.println("Someone connected");
                Thread t = new Thread (new ServerThread(socket));
                t.start();
                System.out.println("new thread");
            }

        } catch (IOException ex) {
            Logger.getLogger(KsiegarniaServer.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Server error");
        }



// this is thread that is opened when new client connects
private class ServerThread implements Runnable 
    {       
        Socket socket;
        ObjectInputStream in;
        ObjectOutputStream out;
        String playerLogin;
        int playerID;

        public ServerThread(Socket s) {
            this.socket = s;            
        }
        public void run() {

            try {
                Msg m;
                in = new ObjectInputStream(socket.getInputStream());
                out = new ObjectOutputStream(socket.getOutputStream());
                System.out.println("Streams are ready!");
                while ( (m = (Msg) in.readObject()).getHeader() != 0 ) 
                {   
                      respondToClient(m); // switch with cases that are running depending on message header

                }               


            } catch (IOException ex) {
                //Logger.getLogger(SpaceBattleGameServer.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("IOException - public void run()");
            } catch (ClassNotFoundException e) {
                System.out.println("ClassNotFoundException - public void run()");
            } finally {
        // other stuff
            }

0 个答案:

没有答案