Ajuda Socket

A Empresa a qual trabalho possui um servidor que aceita a linguagem java com algumas restrições, eles mandaram um exemplo de codigo cliente servidor o qual tem uma classe cliente que faz conexao com o servidor assim que ele é ligado e uma applet visual que envia mensagem.

Porem ela funciona apenas uma vez, eu ligo o servidor ele faz a conexao abre a applenvia quantas mensagen eu quiser depoois que fecho e abro novamente ele para de funcionar!!! Gostartia da ajuda de voces para descobrir o erro

Obrigado!!!

Calsse Client


import OAJUtil.*;
import java.io.*;
import java.net.*;
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++);
         }
         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);
            }

            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 Applet


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

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);
      }

      //Funciton to stop the thread
      public void kill()
      {
         running = false;
      }

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

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


   private class rcvTextArea extends TextArea
   {
      boolean disconnect = false;

      //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++);
         }
         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("Number of events received: ");
   private Label createLabel = new Label("Create and Send message: ");
   private Label hdrLabel = new Label("Type header: ");
   private Label msgLabel = new Label("Type message: ");
   private Label destLabel = new Label("Type destination: ");
   private Label idLabel = new Label("Type 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("Create Message");
   private Button quitApp = new Button("Quit");
   private Button sendMessage = new Button("Send Message");
   private Button cancelMessage = new Button("Cancel");
   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()));
      } catch ( Exception e )
      {
         incLabel.setText(e.toString());
      }
   }

   //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);
      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);

      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("Destination field cannot be empty");
         send = false;
      } else if (idField.getText().compareTo("") == 0) {
         tst = new Short(idField.getText()).shortValue(); 
         if (tst < 0) {
            createLabel.setText("ID must be set to a valid positive short value (0-32767)");
         }
         send = false;
      }
      if (send == true) {
         try {
            send(hdrField.getText(), msgField.getText(), destField.getText(), tst);
         } catch (Exception e) {
            createLabel.setText("Send message failed: " + 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 server and clear the current reservations.
   private void disconnect()
   {
      try {
         f.dispose(); //Dispose frame
         in.close();
         out.close();
         clientSocket.close();
         System.exit(0);
      } catch (Exception e)
      {
      }
   }

   //Eventhandler, handles what to do when a button is pushed.
   public void actionPerformed(ActionEvent event)
   {
      String happened = event.getActionCommand();        

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

   //Print a string in the netscape window
   public void paint (Graphics message)
   {
      message.drawString("Application will open in a new window", 20, 20);
   }

}    

Os Arquivos e a biblioteca estao tudo no link abaixo!!!

http://www.4shared.com/file/45HF1viB/OJS.html?

Você notou que você assinou uma cláusula de confidencialidade quando foi contratado? Pq normalmente as empresas são bem rancorosas quando você publica um código delas totalmente, dessa forma. E pode ser que você esteja ferindo essa cláusula, o que dá direito a demissão por justa causa e até processos contra você.

Mas, se esse sistema for mesmo público, ficaria difícil achar o bug para você. O mais fácil mesmo é você começar a investigar o problema, e depois voltar aqui com uma dúvida um pouco mais específica.

Nao esses códigos soh rodam em nossos servidores é código unico e pode ser pego pelo próprio site da empresa nao tem problema em estar postando ele

Eu tenho sim uma duvida ja mais especifica

a parte do códigoi que soh fica no servidor que faz o socket soh pode ser chamada uma vez em nosso servidores entao eu posso deichar o socket aberto sem fecha-lo? para que funcione direito o sistema

Bom eu segui um tutorial da guj

http://www.guj.com.br/article.show.logic?id=126

e fica dadno erro ao tentar criar o socket

ja colokei varias portas mas noa coinssegui fazer funcionar

Bom voltado ao primeiro codigo que mandei verifiquei e o erro esta dando ao iniciar o ipclient meu servidor mostra um erro ao pegar o ip

O que seria esse erro?

Descobri que o erro é de conection reset
alguem saberia o motivo desse erro?