3
I want to request the serverSocket
a response (some information) every 5 seconds.
I rode my socket
and I’m wearing a TimerTask
to execute a method every 5 seconds, but only the first execution is successful.
Attempt a
Call the complete method and within this method the socket is created and closed at the completion of the same.
Timertask code
public void run() {
SocketeClient() mCommand = new SocketClient();
mCommand.runClient();
}
Socket code
public void runClient() {
System.out.println("---------------------");
try {
client = new Socket("localhost", 9999);
input = new DataInputStream(client.getInputStream());
output = new DataOutputStream(client.getOutputStream());
byte request[] = new byte[18];
output.write(request, 0, 17);
int totalBytes = input.available();
byte response[] = new byte[totalBytes];
boolean continuar = true;
int bytesLer = 0;
while (continuar && bytesLer < totalBytes) {
try {
response[bytesLer] = input.readByte();
bytesRead++;
} catch (IOException e) {
System.out.println(e.getMessage());
reading = false;
}
}
System.out.println(response[0] + response[1]);
input.close();
output.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("---------------------");
}
In this example, there is only return in the first execution, all other executions that occur every 5 seconds have no return. The local door is changing. Example: 55147, then 55148 and successively.
Eclipse console:
----------------------------------------------------
Cliente: Socket[addr=localhost/127.0.0.1,port=9999,localport=52206]
05,45
-----------------------------------------------------
----------------------------------------------------
Cliente: Socket[addr=localhost/127.0.0.1,port=9999,localport=52206]
Infelizmente não houve resposta do servidor.
-----------------------------------------------------
----------------------------------------------------
Cliente: Socket[addr=localhost/127.0.0.1,port=9999,localport=52206]
Infelizmente não houve resposta do servidor.
-----------------------------------------------------
Attempt two
I tried another approach, thought I’d pass an object Socket
for the method, so I would not have to keep creating and closing, I would use it to receive the value every 5 seconds, but I get the following error from the second execution and I am not using "client.close()" since I intend to always use the same Socket object.
Error
java.net.SocketException: Socket is closed
at java.net.Socket.getInputStream(Unknown Source)
at com.iamExport.model.MessageCommands.apiGetAudienceStatus(MessageCommands.java:29)
at com.iamExport.model.ConnectionSocket.Connectar(ConnectionSocket.java:36)
at com.iamExport.model.ConnectionSocket.run(ConnectionSocket.java:26)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Remarks
The server keeps running, everything I tried failed, the idea is to send bytes to it, and the same return me other bytes. The first approach tries to create new
socket
s and the second use the samesocket
. I’m trying to communicate with an interval of time.I tried to explain my problem and need that I have. I believe I am in the way, but something is missing.