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!!!