Aug 14, 2014

JAVA echo server using SWING




I using swing(GUI for java).


This is ActionListener

  1.     @Override
  2.     public void actionPerformed(ActionEvent e) {
  3.         if(e.getSource()==btnServerOpen){
  4.             String getPort=portNum.getText();
  5.             if(!getPort.isEmpty()){
  6.                
  7.                 int port=Integer.parseInt(getPort);
  8.                
  9.                 portOpen(port);
  10.                
  11.                
  12.             }else{
  13.                 commText.setText("Not found PORT number");
  14.             }
  15.            
  16.         }else if(e.getSource()==btnServerClose){
  17.             portClose();
  18.            
  19.         }else if(e.getSource()==btnClear){
  20.             commText.setText("");
  21.         }
  22.        
  23.     }
I use 3 buttons.

There are server open, server close and text clear.

This is server port open method.

  1.     private void portOpen(int port) {
  2.         disconnected=false;
  3.         try {
  4.             ss=new ServerSocket(port);
  5.             server=new Thread(new tcpServer(ss));
  6.             server.start()
  7.             commText.setText("Waiting for connection.");
  8.            
  9.            
  10.            
  11.         } catch (IOException e) {
  12.             System.out.println(e);
  13.             e.printStackTrace();
  14.         }
  15.        
  16.     }

And this is server port close method.

  1.     private void portClose() {
  2.        
  3.         try {
  4.             disconnected=true;
  5.             ss.close();
  6.             server.interrupt();
  7.            
  8.         } catch (IOException e) {
  9.             // TODO Auto-generated catch block
  10.             e.printStackTrace();
  11.         }
  12.         commText.setText("server is closed");
  13.     }
Line 6. server.interrupt(); is thread stop method.



And this is socket comm thread

  1.         while(!serverSWT.disconnected){
  2.             try{
  3.                 client=server.accept();
  4.                 ip=client.getRemoteSocketAddress();
  5.                 serverSWT.commText.setText(serverSWT.commText.getText()+"\n"+ip+" is connected");
  6.                 is=client.getInputStream();
  7.                 os=client.getOutputStream();
  8.                 byte[] buffer=new byte[100];
  9.                 int length;
  10.                
  11.                
  12.                 while(((length=is.read(buffer))!=-1)&&(!serverSWT.disconnected)){
  13.                     System.out.println(length);
  14.                     String rcv=new String(buffer,0,length);
  15.                     System.out.println(rcv);
  16.                     String rcvBuf=serverSWT.commText.getText()+"\n";
  17.                     serverSWT.commText.setText(rcvBuf+"client: "+rcv);
  18.                     os.write(buffer, 0,length);
  19.                     serverSWT.commText.setText(serverSWT.commText.getText()+"\nserver: "+rcv);
  20.                    
  21.                 }
  22.                 client.close();
  23.                
  24.                
  25.             }catch(Exception e){
  26.                 System.out.println(e);
  27.             }
  28.         }
Line 3 is waiting for connection of client.

Line 1 disconnected is main java's boolean variable.

This variable is efficient for thread-stop.

If you don't use the variable, server receive packet one time.


No comments:

Post a Comment