java - How do I close a UDP server without throwing an exception? -
i have server waits incoming client messages , uses udp. when try close udp connection ioexception..
public void run(){ string user_message = null; try { connection = startserver(); system.out.println("server started"); while ((true) && (serverstarted) ){ try { user_message = receivemessage(); check_query( user_message , "," ); } catch ( ioexception ex ) { system.out.println("error1 "+ex.getmessage()); seterror( "error establishing connection " ) ; txt_log.settext(txt_log.gettext() + "\n error establishing connection0") ; break; } } system.out.println("server stopped....."); } catch ( socketexception ex ) { system.out.println("error2 "+ex.getmessage()); seterror("error establishing connection ") ; txt_log.settext(txt_log.gettext() + "\n error establishing connection1") ; } catch( nullpointerexception ex){ system.out.println("error3 "+ex.getmessage()); ex.printstacktrace(); seterror("error null pointer ") ; txt_log.settext(txt_log.gettext() + "\n error :"+ex.getmessage()) ; } } /* * method starts server datagram bind port */ public datagramsocket startserver() throws socketexception{ return new datagramsocket(10000); } /* * method stops server server not able receive client requests */ public void closeserver(){ if (connection != null){ //connection.disconnect(); connection.close(); //connection = null; } } /* * method sends message via datagram client */ private void sendmessage( string message ) throws ioexception{ byte[] message_byte = message.getbytes(); packet_send = new datagrampacket( message_byte , message_byte.length , packet_receive.getaddress() , packet_receive.getport() ); connection.send( packet_send ); } /* * method receives messages clients */ private string receivemessage() throws ioexception,nullpointerexception{ if (connection!=null){ byte[] buf = new byte[256]; packet_receive = new datagrampacket( buf , buf.length ) ; connection.receive( packet_receive ) ; return getstring( packet_receive ); } throw new nullpointerexception("connection cannot null"); } /* * method retrieves data packet , converts string */ private string getstring(datagrampacket packet){ string string = new string ( packet.getdata() , 0 , packet.getlength()).trim(); return string; } private void drop_dbconnection(){ if (db_connection!=null){ try{ db_connection.close(); //db_connection = null; } catch(sqlexception e){ txt_log.settext("server connection error..."); seterror("cannot close database connection"); } } } public void closeserver(){ if (connection != null){ //connection.disconnect(); connection.close(); //connection = null; } }
private void btn_stopactionperformed(java.awt.event.actionevent evt) {
if ( serverstarted ){ txt_log.settext( txt_log.gettext()+"\nserver has been stopped ...." ) ; serverstarted = false ; drop_dbconnection() ; closeserver(); btn_start.setenabled( true ) ; btn_stop.setenabled( false ); } }
my output , stacktrace
server started server started..... error1 socket closed server stopped..... java.net.socketexception: socket closed @ java.net.plaindatagramsocketimpl.receive0(nativemethod) @ java.net.plaindatagramsocketimpl.receive(plaindatagramsocketimpl.java:136) @ java.net.datagramsocket.receive(datagramsocket.java:712) @ server.server.receivemessage(server.java:608) @ server.server.run(server.java:528) @ java.lang.thread.run(thread.java:619)
how close server no exception thrown?
the exception closed because closed exception. can catch exception , continue rather printing out. best way handle this.
Comments
Post a Comment