Vraag : hoe te om de zelfde haven zonder repeatly te gebruiken

ik kreeg error

INFO: Uitzondering in PortListener
SEVERE: null
java.net.BindException: Adres reeds in use
in java.net .PlainSocketImpl.socketBind (Methode Native)
in java.net .PlainSocketImpl.bind (PlainSocketImpl.java: 359)
in java.net .ServerSocket.bind (ServerSocket.java: 319)
in java.net .ServerSocket.t> (ServerSocket.java: 185)
in java.net .ServerSocket.t> (ServerSocket.java: 97)
bij tcplistener.PortListener$ToDoTask.run (PortListener.java: 67)
bij java.util.TimerThread.mainLoop (Timer.java: 512)
bij java.util.TimerThread.run (Timer.java: 462)


hoe te om problem
op te lossen
" codeBody "
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
de
public klasse PortListener breidt HttpServlet uit {
   de privé sok van de Contactdoos;
   privé ServerSocket serverSocket;
   
   de privé tijdopnemer van de Tijdopnemer;
   privé int. a = 0;
   
openbare nietige init () werpt ServletException

{
    probeer {
            tijdopnemer = nieuwe Tijdopnemer ();
            timer.schedule (nieuwe ToDoTask (), 5000);
            
           
    } vangst (ex Uitzondering)
    {
       Logger.getLogger (PortListener.class.getName ()).log (ongeldig, ex Level.SEVERE,);
    }
}

de klasse ToDoTask breidt TimerTask uit
 {
   openbare nietige looppas ()
    {
       probeer
        {
                timer.cancel ();
                InputStream is = getServletContext () .getResourceAsStream („/WEB-INF/navl.properties“);
                Eigenschappen p = nieuwe Eigenschappen ();
                p.load (is);
                is.close ();
                Koord pro = p.getProperty („dataPort“);
                int. haven = Integer.parseInt (pro);
                serverSocket = nieuwe ServerSocket (haven);
        
        terwijl (waar)
        {
           
            
            System.out.println („Luisterend op ......“ + haven);
            sok = serverSocket.accept ();
            Draad t = nieuwe Draad (nieuwe ModuleHandler (sok));
            t.start ();
                    
           
            //startthread (sok);
        }


		
        } vangst (ex Uitzondering) 
        {
                System.out.println („Uitzondering in PortListener“);
                Logger.getLogger (PortListener.class.getName ()).log (ongeldig, ex Level.SEVERE,);
               
        }
        


    }


  }

    beschermde nietige het meest processRequest (verzoek HttpServletRequest, reactie HttpServletResponse)
    werpt ServletException, IOException {
}      
       
    beschermde nietige doPost (verzoek HttpServletRequest, reactie HttpServletResponse)
    werpt ServletException, IOException {
        het meest processRequest (verzoek, reactie);
    }

    openbare getServletInfo van het Koord () {
        terugkeer „Korte beschrijving“;
    }/

}

Antwoord : hoe te om de zelfde haven zonder repeatly te gebruiken

In dit geval, leidt de 1st tijdopnemerdraad tot ServerSocket en het zou verzameld geen huisvuil kunnen zijn toen de 2de looppas van de tijdopnemerdraad; dat is waarom u bindt uitzondering wordt.

U kunt krijgen op welke haven de contactdoos door de getLocalPort () methode te gebruiken luistert.

Andere oplossingen  
 
programming4us programming4us