Ajuda com Socket

6 respostas
A

Tenho um Servidor Java p´roprio da empresa a qual trabalho e ando tendo um problema.

Possuo diversas classes para poder fazer o envio de uma mensagem ao pager.

tenho a classe Client que faz conexao com vervidor e a classe do applet

Tudo funciona porem quando executo o applet conssigo envia mensagens e tudo mais assim que eu saiu da página e volto a executa-la pela segunda vez ela para de funcionar. No Servidor Acusa um erro relacionado a IP mas não identifiquei no código

ERRO: 'Error initiating IP communication: java.net.SocketException: Connection reset'

Classe Applet

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

Visual Applet

[code]

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("")) {
do {
receive = in.readLine();
if (receive.startsWith("")) {
type = parseString(receive, 6);
if (type.equalsIgnoreCase("message")) {
this.append("Message received, ");
}
} else if (receive.startsWith("")) {
value = parseString(receive, 5);
if (type.equalsIgnoreCase("message")) {
this.append("Header: " + value + ", ");
}
} else if (receive.startsWith("")) {
value = parseString(receive, 6);
if (type.equalsIgnoreCase("message")) {
this.append("Body: " + value + ", ");
}
} else if (receive.startsWith("")) {
value = parseString(receive, 6);
if (type.equalsIgnoreCase("message")) {
this.append("Origin: " + value + ", ");
}
} else if (receive.startsWith("")) {
value = parseString(receive, 4);
if (type.equalsIgnoreCase("message")) {
this.append("ID: " + value + ", ");
}
} else if (receive.startsWith("")) {
value = parseString(receive, 5);
if (type.equalsIgnoreCase("message")) {
this.append("RefID: " + value + "\n");
}
}

} while ( !receive.startsWith("") );
}
}
}
}

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 = null;
String Host = "192.168.0.89";
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();
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);
}

//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("\n");
out.println("message\n");
out.println("" + header + "\n");
out.println("" + message + "\n");
out.println("" + number + "\n");
out.println("" + ID + "\n");
out.println("
\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();
disconnect();

}
}

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

}

6 Respostas

lvolgarini

Vc está matando sua conexão no primeiro acesso, por isso q da o erro no socket de conection reset!!

A

E como eu posso Resolver isso?

eu não achei o erro ainda e preciso muito resolver isso

Obrigado pela resposta.

A

o Erro do meu codigo esta somente na cliente que ele mata a conexao

panngo

TÓPICO DUPLICADO!!

http://guj.com.br/posts/list/144115.java

Não te ajudo mais…

A

Foi mal eu postei em avançado e percebi que nao tem nada de avançado ai passei para o basico mais comum

Desculpa mesmo nao sabia e nao sei como retira o topico tbm

A

panngo:
TÓPICO DUPLICADO!!

http://guj.com.br/posts/list/144115.java

Não te ajudo mais…

Nao sei apagar um topico minha duvioda nao eh avançada por isso mudei para o basico

Criado 11 de novembro de 2009
Ultima resposta 11 de nov. de 2009
Respostas 6
Participantes 3