Ajuda Client Socket quase completo

Gostaria de pedir ajuda de vcs pois tneho um código que roda em um servidor da empresa a qual trabalho
Ele possui varias classe mas as 2 principais seria uma Applet e um CLient e eu gostaria de uma ajuda com o erro

Ao abrir pela primeira vez o meu programinha funciona e envia a mensagem que eu kero porem quando cliko no botao cancelar o programa sai e ao reconectar nele ele me acusa os seguintes erro

(“Erro conexao”) ao entrar
(“erro no Disconect”) ao sair

segue os códigos

Cliente


import OAJUtil.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;

public class Client implements JatConstants
{
   static ServerSocket serverSocket = null;
   static Socket clientSocket = null;
   public static PrintWriter out = null;
   
   
   
   
   class ipClient extends Thread
   {
      private static final int MAXRCVLENGTH = 512;
      BufferedReader in = null;

      private String parseString(String rcvbuf, int offset)
      {
         String retval = "";
         int i = offset;
         while ((rcvbuf.charAt(i) != '<') && (i < rcvbuf.length())) {
            retval += rcvbuf.charAt(i++);
         }
         //JOptionPane.showMessageDialog(null, retval);
         return retval;
      }

      public void run()
      {
    	  
      
         try {

            try {
               serverSocket = new ServerSocket(12666);
            } catch (IOException ioe) {
               JatLog.writePermLog("Could not listen on port: 12666. " + ioe);
               System.exit(-1);
            }

            try {
               clientSocket = serverSocket.accept();
            } catch (IOException ioe) {
               JatLog.writePermLog("Accept failed. " + ioe);
               System.exit(-1);
            }

            try {
               out = new PrintWriter(clientSocket.getOutputStream(), true);
               in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            } catch (IOException ioe) {
               JatLog.writePermLog("Init IP failed" + ioe);
               System.exit(-1);
            }
            
            
            

            
            

            String receive = "", type = "", value = "";
            short id;
            JatMessage message = null;
            while (true) {
               id = 0;
               type = "";
               value = "";
               if (in.readLine().startsWith("<MSG>")) {
                  do {
                     receive = in.readLine();
                     if (receive.startsWith("<TYPE>")) {
                        type = parseString(receive, 6);
                        if (type.equalsIgnoreCase("message")) {
                           JatLog.writeTempLog("Message created");
                           message = new JatMessage(USER_RESPONSE_NONE);
                           message.setCompletion();
                        }
                     } else if (receive.startsWith("<HDR>")) {
                        value = parseString(receive, 5);
                        if (type.equalsIgnoreCase("message")) {
                           JatLog.writeTempLog("Setting header: " + value);
                           message.setSubject(value);
                        }
                     } else if (receive.startsWith("<BODY>")) {
                        value = parseString(receive, 6);
                        if (type.equalsIgnoreCase("message")) {
                           JatLog.writeTempLog("Setting body: " + value);
                           message.setBody(value);
                        }
                     } else if (receive.startsWith("<DEST>")) {
                        value = parseString(receive, 6);
                        if (type.equalsIgnoreCase("message")) {
                           JatLog.writeTempLog("Setting destination: " + value);
                           message.setCallNumber(value);
                        }
                     } else if (receive.startsWith("<ID>")) {
                        value = parseString(receive, 4);
                        if (type.equalsIgnoreCase("message")) {
                           id = Short.valueOf(value).shortValue();
                        }
                     } else if (receive.startsWith("</MSG>")) {
                        JatLog.writeTempLog("Message creation finished");
                        if (type.equalsIgnoreCase("message")) {
                           JatLog.writeTempLog("Sent message with id: " + message.send(id) + " from Java, refID: " + message.getRefID() );
                        }
                     } else {
                        JatLog.writeTempLog("ipClient received: " + receive);
                     }

                  } while ( !receive.startsWith("</MSG>") );
               }
            }
         } catch (Exception e) {
            JatLog.writePermLog("Error initiating IP communication: " + e);
         }
         try {
            in.close();
            out.close();
            clientSocket.close();
            serverSocket.close();
         } catch (IOException ioe) {
            JatLog.writePermLog("closeIP failed " + ioe);
         }
         return;    
      }
   }

   public static void main(String args[])
   {
      Client cli  = new Client();
      ipClient itst = cli.new ipClient();
      JatSystem tester;
      try{
         tester = JatSystem.createJatSystem("3.00");
      } catch (Exception e)
      {
         JatLog.writeTempLog(e.getMessage());
         return;
      }
      try{
         MyJatMessageHandler msgHandler = new MyJatMessageHandler();
         tester.addService(msgHandler);
      } catch (Exception e)
      {
         JatLog.writeTempLog("MessageHandler: " + e.getMessage());
      }
      try{
         MyJatMessageConfHandler msgConfHandler = new MyJatMessageConfHandler();
         tester.addService(msgConfHandler);
      } catch (Exception e)
      {
         JatLog.writeTempLog("MessageConfHandler: " + e.getMessage());
      }
      try{
         MyJatMessageConfRespHandler msgConfRespHandler = new MyJatMessageConfRespHandler();
         tester.addService(msgConfRespHandler);
      } catch (Exception e)
      {
         JatLog.writeTempLog("MessageConfRespHandler: " + e.getMessage());
      }
      try{
         MyJatIMHandler IMHandler = new MyJatIMHandler();
         tester.addService(IMHandler);
      } catch (Exception e)
      {
         JatLog.writeTempLog("IMHandler: " + e.getMessage());
      }
      try{
         MyJatIMRespHandler IMRespHandler = new MyJatIMRespHandler();
         tester.addService(IMRespHandler);
      } catch (Exception e)
      {
         JatLog.writeTempLog("IMRespHandler: " + e.getMessage());
      }
      try{
         tester.execute();                
      } catch (Exception e)
      {
         JatLog.writeTempLog("Start system: " + e.getMessage());
         return;
      }

      JatLog.writeTempLog("System ready.. waiting for event...");
      itst.start();
   }
}

Classe visual


import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;



public class oajApplet extends Applet implements ActionListener
{
	
	
	   static Socket clientSocket = null;
	   public static PrintWriter out = null;
	   public static BufferedReader in = null;

	   
	   
	   
	   
	



private class rcvAreaThread extends Thread
   {
      private rcvTextArea rcvArea;
      boolean running = true;

      //Constructor rcvAreaThread the thread
      public rcvAreaThread(int rows, int cols)
      {
         super();        
         rcvArea = new rcvTextArea(rows, cols);
         JOptionPane.showMessageDialog(null , "superlativo");
      }

      //Funciton to stop the thread
      public void kill()
      {
         running = false;
         JOptionPane.showMessageDialog(null , "kill");
      
      }

      //The main function in the thread.
      public void run()
      {
         while (running)
         {
            try
            {
               rcvArea.readEvent(); //Read stock from Saleserver
               JOptionPane.showMessageDialog(null , "running true");
            } catch (Exception e)
            
            {
               e.printStackTrace();
               break;
            }
         }
      }

      //Returns the current stock
      public rcvTextArea getEvent()
      {        
         return rcvArea;
         
      }
   }


   private class rcvTextArea extends TextArea
   {
      boolean disconnect = true;

      //Constructor for the class
      public rcvTextArea(int rows, int cols)
      {
         super(rows, cols);
      } 

      private String parseString(String rcvbuf, int offset)
      {
         String retval = "";
         int i = offset;
         while ((rcvbuf.charAt(i) != '<') && (i < rcvbuf.length())) {
            retval += rcvbuf.charAt(i++);
            JOptionPane.showMessageDialog(null , "disconect1");
         }
         return retval;
      }

      //Read current stock for specified type of goods, and update the textfield in the GUI
      public void readEvent() throws Exception
      {
         String receive = "", type = "", value = "";
         while (true) {
            type = "";
            value = "";
            if (in.readLine().startsWith("<MSG>")) {
               do {
                  receive = in.readLine();
                  if (receive.startsWith("<TYPE>")) {
                     type = parseString(receive, 6);
                     if (type.equalsIgnoreCase("message")) {
                        this.append("Message received, ");
                     }
                  } else if (receive.startsWith("<HDR>")) {
                     value = parseString(receive, 5);
                     if (type.equalsIgnoreCase("message")) {
                        this.append("Header: " + value + ", ");
                     }
                  } else if (receive.startsWith("<BODY>")) {
                     value = parseString(receive, 6);
                     if (type.equalsIgnoreCase("message")) {
                        this.append("Body: " + value + ", ");
                     }
                  } else if (receive.startsWith("<DEST>")) {
                     value = parseString(receive, 6);
                     if (type.equalsIgnoreCase("message")) {
                        this.append("Origin: " + value + ", ");
                     }
                  } else if (receive.startsWith("<ID>")) {
                     value = parseString(receive, 4);
                     if (type.equalsIgnoreCase("message")) {
                        this.append("ID: " + value + ", ");
                     }
                  } else if (receive.startsWith("<RID>")) {
                     value = parseString(receive, 5);
                     if (type.equalsIgnoreCase("message")) {
                        this.append("RefID: " + value + "\n");
                     }
                  }

               } while ( !receive.startsWith("</MSG>") );
            }
         }
      }
   }

   private Label incLabel = new Label("Incoming: ");
   private Label nrLabel = new Label("Numeros recebidos: ");
   private Label createLabel = new Label("Net Driel  ");
   private Label hdrLabel = new Label("Titulo: ");
   private Label msgLabel = new Label("Mensagem ");
   private Label destLabel = new Label("Pager ");
   private Label idLabel = new Label("ID (0 or empty for automatic): ");
   private TextField nrField = new TextField(5);
   private TextField hdrField = new TextField(35);
   private TextArea msgField = new TextArea(4, 35);    
   private TextField destField = new TextField(4);
   private TextField idField = new TextField("0", 8);    
   private Button createPag = new Button("NetDriel");
   private Button quitApp = new Button("Quit");
   private Button sendMessage = new Button("Enviar");
   private Button cancelMessage = new Button("Cancelar");
   private int i = 0;

   private Panel listenButtons = new Panel();
   private Panel messageButtons = new Panel();
   private Panel messageHdr = new Panel();
   private Panel messageMsg = new Panel();
   private Panel messageDest = new Panel();
   private Panel messageID = new Panel();

   private Frame f, f2;
   private GridBagLayout gridbag = new GridBagLayout();
   private GridBagConstraints constr = new GridBagConstraints();
   private GridBagLayout gridbagMessage = new GridBagLayout();
   private GridBagConstraints constrMessage = new GridBagConstraints();
   private rcvAreaThread incAreaThr;
   private rcvTextArea incArea;

   void ipInit()
   {
      try {
         clientSocket = new Socket(getCodeBase().getHost(), 12666);
         out = new PrintWriter(clientSocket.getOutputStream(), true);
         in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
         JOptionPane.showMessageDialog(null , "Clientsocked");
      } catch ( Exception e ) 
      
      
      {
    	  
         incLabel.setText(e.toString());
         JOptionPane.showMessageDialog(null , "erro ao conectar");
         System.exit(-1);
    	  
      }
   }

   //Create login frame
   public void init()
   {
	   
	      
      ipInit();
     
      f = new Frame();
      f.setLayout(gridbag);

      constr.gridx = 0;
      constr.gridy = 0;
      constr.gridwidth = 2;
      gridbag.setConstraints(incLabel, constr);
      f.add(incLabel);


      incAreaThr = new rcvAreaThread(30, 85);
      incArea = incAreaThr.getEvent();
      incArea.setEditable(false);
      incArea.setText("Programa Desenvolvido pela equipe de Tecnologia da Eritel Data: 13/03/09");
      incAreaThr.start();
      constr.gridx = 0;
      constr.gridy = 1;
      constr.gridwidth = 2;
      constr.gridheight = 10;
      gridbag.setConstraints(incArea, constr);
      f.add(incArea);

      constr.gridx = 0;
      constr.gridy = 12;
      constr.gridwidth = 2;
      constr.gridheight = 1;
      gridbag.setConstraints(listenButtons, constr);
      listenButtons.add(quitApp);
      listenButtons.add(createPag);
      quitApp.setActionCommand("Quit");
      quitApp.addActionListener(this);    
      createPag.setActionCommand("Create");
      createPag.addActionListener(this);
      f.add(listenButtons);

      f.setSize(800, 600);
      f.setVisible(true);
   }

   //Create frame for purchasing goods
   public void createMessage()
   {
      f2 = new Frame();
      f2.setLayout(gridbagMessage);
      f2.setBackground(Color.GREEN);
      constrMessage.gridx = 0;
      constrMessage.gridy = 0;
      constrMessage.gridwidth = 4;
      gridbagMessage.setConstraints(createLabel, constrMessage);
      f2.add(createLabel);

      constrMessage.gridx = 1;
      constrMessage.gridy = 1;
      constrMessage.gridwidth = 2;
      gridbagMessage.setConstraints(messageHdr, constrMessage);
      messageHdr.add(hdrLabel);        
      messageHdr.add(hdrField);
      f2.add(messageHdr);

      constrMessage.gridx = 0;
      constrMessage.gridy = 2;
      constrMessage.gridwidth = 4;
      constrMessage.gridheight = 4;
      gridbagMessage.setConstraints(messageMsg, constrMessage);
      messageMsg.add(msgLabel);        
      messageMsg.add(msgField);
      f2.add(messageMsg);

      constrMessage.gridx = 1;
      constrMessage.gridy = 6;
      constrMessage.gridwidth = 2;
      constrMessage.gridheight = 1;
      gridbagMessage.setConstraints(messageDest, constrMessage);
      messageDest.add(destLabel);        
      messageDest.add(destField);
      f2.add(messageDest);

      constrMessage.gridx = 1;
      constrMessage.gridy = 7;
      constrMessage.gridwidth = 2;
      gridbagMessage.setConstraints(messageID, constrMessage);
      messageID.add(idLabel);        
      messageID.add(idField);
      f2.add(messageID);
     
      constrMessage.gridx = 1;
      constrMessage.gridy = 8;
      constrMessage.gridwidth = 2;
      gridbagMessage.setConstraints(messageButtons, constrMessage);
      messageButtons.add(cancelMessage);
      messageButtons.add(sendMessage);
      cancelMessage.setActionCommand("Cancel");
      cancelMessage.addActionListener(this);    
      sendMessage.setActionCommand("Send");
      sendMessage.addActionListener(this);
      f2.add(messageButtons);

      f2.setSize(640, 480);
      f2.setVisible(true);

   }

   //To send a buy request to the Saleserver
   private void sendMessage()
   {
      short tst = 0;
      boolean send = true;;

      if (destField.getText().compareTo("") == 0) {
         //createLabel.setText("Preencha Pager");
         JOptionPane.showMessageDialog(null , "Preencha Campo Pager ");
         send = false;
      } else if (idField.getText().compareTo("") == 0) {
         tst = new Short(idField.getText()).shortValue(); 
         if (tst < 0) {
            //createLabel.setText("Erro ID(0-32767)");
            JOptionPane.showMessageDialog(null , "Erro ID");
         }
         send = false;
      }
      if (send == true) {
         try {
            send(hdrField.getText(), msgField.getText(), destField.getText(), tst);
            JOptionPane.showMessageDialog(null , "Mensagem Enviada");
         } catch (Exception e) {
            //createLabel.setText("Falha: " + e);
            JOptionPane.showMessageDialog(null , "Deu o erro" + e);
            
         }
      }
   }

   private void send(String header, String message, String number, short ID) throws Exception
   {
      out.println("<MSG>\n");
      out.println("<TYPE>message</TYPE>\n");
      out.println("<HDR>" + header + "</HDR>\n");
      out.println("<BODY>" + message + "</BODY>\n");
      out.println("<DEST>" + number + "</DEST>\n");
      out.println("<ID>" + ID + "</ID>\n");
      out.println("</MSG>\n");
      out.flush();
   }

   //To disconnect from the servidor.
   private void connect()
   {
	  // clientSocket.connect();
   }
   private void disconnect()
   {
      try {
    	 JOptionPane.showMessageDialog(null , "Programa Fechado");
    	 f2.dispose(); 
         f.dispose(); //Fecha frame
         in.close();
         out.close();
         clientSocket.close();
         
         
         System.exit(-1);
         
      } catch (Exception e)
      {
    	 
      JOptionPane.showMessageDialog(null , "Erro no disconetc");
      
      
      
      
      }
   }

   //Açao do botao.
   
   public void actionPerformed(ActionEvent event)
   {
      String happened = event.getActionCommand();        

      if (happened.equals("Create")){
         createMessage();
         
      } else if (happened.equals("Quit")){
         disconnect();
         ipInit();
      } else if (happened.equals("Send")){
         sendMessage();
         
      } else if (happened.equals("Cancel")){
        // f2.dispose();
        // f.dispose();
         disconnect();
         
      }
   }

   //Print a string in the netscape window
   public void paint (Graphics message)
   {
      message.drawString("Bem vindo NetDriel", 20, 20);
   }

}    


por favor me ajudem

Pelo oq eu estava testando meu erro provavelmente seja na hora em que eu conecto envio quantas mensagens eu kiser e quando saiu eu nao esteja fechando a porta direito e por isso nao conssigo reenviar

na primeira vez q envio a mensagem chega com sucesso

apos eu fechar o programa e enviar novamente aparece

“Erro de conexao”

devido a esse contexo a primeira vezx cai no try e a segunda no cacth


 void ipInit()   
   {   
      try {   
         clientSocket = new Socket(getCodeBase().getHost(), 12666);   
         out = new PrintWriter(clientSocket.getOutputStream(), true);   
         in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));  
//aqui significa q foi enviada 
      } catch ( Exception e )   
      {   
         incLabel.setText(e.toString()); 
//aqui significa q deu erro na conexao com a porta  
      }   
   }   

Envia a stack trace pra gente dar uma olhada.

Ex: e.printStackTrace();

flws

entao os erros q aparecem no eclipse sao esses

java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.(Unknown Source)
at java.net.Socket.(Unknown Source)
at oajApplet.ipInit(oajApplet.java:179)
at oajApplet.init(oajApplet.java:201)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

porem eu ainda nao sei oq tem fazer preciso de ajuda :frowning:

Nessa parto do codigo nao teria como eu alem de fechar tudo isso q estou fechando tambem fecham uma porta logica com algum comando (1266 = porta)

public void actionPerformed(ActionEvent event)
   {
      String happened = event.getActionCommand();        

      if (happened.equals("Create")){
         createMessage();
         
      } else if (happened.equals("Quit")){
         disconnect();
         ipInit();
      } else if (happened.equals("Send")){
         sendMessage();
         
      } else if (happened.equals("Cancel")){
         //f2.dispose();
         //f.dispose();
    	  
         disconnect();
         ipInit();
         //System.exit(1);
         
      }
   }

O erro descrito da stack diz que o servidor / rede / porta não foram encontrados.

Acredito que vc vá dizer que estão todos em execução.

Como vc está dentro de um browser verifique o IP que vc está utilizando pra criar o Socket, talvez ele esteja se modificando dianamicamente.

Vc disse que isso acontece na segunda vez que envia a mensagem. O que significa “segunda vez”?

[b]1) Vc acessa a applet envia as mensagens, executa um “Quit” depois se conecta novamente e tenta enviar as mensagens?

  1. Vc acessa a applet envia as mensagens, executa um “Quit” sai do browser e depois entra de novo para enviar as mensagens?[/b]

flws

Entao obrigado por estar perdnedo tempo aki comigo !!!

vou verifcar esse caso do ip ma snao sei por onde começa sendo q o ip o qual acesso ele eh statico 192.168.0.89/client.html

e eu ja fiz das duas maneiras tanto sai do brownser quanto soh dei quit msm e dos dois jeitos nao funcionam

eu conssigo enviar quantas mensagens eu kiser ateh que eu aperte o quit e tente volta ja nao da mais ateh dar reboot na placa

olha o codigo com a parte do host


 void ipInit()
   {
      try {
         clientSocket = new Socket(getCodeBase().getHost(), 12666);
         out = new PrintWriter(clientSocket.getOutputStream(), true);
         in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
         JOptionPane.showMessageDialog(null , "Clientsocked");
      } catch ( Exception e ) 
      
      
      {
    	  
         incLabel.setText(e.toString());
         JOptionPane.showMessageDialog(null , "erro ao conectar= " + e);
         e.printStackTrace();
         disconnect();
         System.exit(1);
         
    	  
      }
   }
  1. Este código é correspondente ao client não ao Server.

  2. Verifique no gerenciador de tarefas se o navegador continua em execução depois que vc “sai”. Se ele continuar em execução, “mate” ele e execute novamente.

  3. Se não me engando algumas versões de navegadores constumam dar problemas com applets, experimente uma mais recente.

flws

estarei reformulando o codigo