Caros colegas,
Sou iniciante em comunicação Socket TCP/IP.
Estou desenvolvendo um programa em Java que se comunica com um Robo Japonês através de Socket TCP/IP, onde este Robo implementa a parte Client e meu programa deve implementar o lado Server para estabelecer comunicação e para que meu programa envie mensagens de texto que representam ordens de tarefas ao Robo Client.
Estou conseguindo estabelecer a comunicação e enviar algumas mensagens de ordem, as quais são executadas pelo cliente Robo, normalmente.
Contudo, em algum momento esta comunicação se perde e eu não estou conseguindo determinar quando isso ocorre.
Este é o trecho do codigo que estou usando:
public void waitForConnection() {
if (this.serverSocket!=null) {
try {
setSocket(serverSocket.accept());
if (getSocket()!=null) {
Date date = new Date(System.currentTimeMillis());
System.out.println("Client Connected on "+this.getSocket()+" "+date);
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bufferedWriter = new PrintStream(socket.getOutputStream());
this.setConnected(true);
}
} catch (IOException ex) {
Logger.getLogger(IPv4ServicePort.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void setPort(int port) {
if (service.getSocketType()==service.IPv4_SOCKET_SERVER) {
try {
setServerSocket(new ServerSocket(port));
} catch (IOException ex) {
Logger.getLogger(IPv4ServicePort.class.getName()).log(Level.SEVERE, null, ex);
}
}
this.port = port;
}
De fato, utilizo estes dois métodos para estabelecer a porta que o Server irá ouvir, e responder a requisições do Client com mensagens de ordem. O Cliente pergunta se existe alguma ordem a ser executada e o servidor responde com a ordem que precisa ser executada.
Todavia o cliente consegue a conexão que é aceita no pelo serverSocket.accept() que gera um Socket ; Depois disso, a troca de mensagens ocorre e em algum momento o Robo “reclama” que não conseguiu mais conectar no servidor naquela porta. Só que no servidor eu não consigo perceber o porque esta falha ocorreu, nem sei como reestabelecer tal comunicação. Tentei usar novamente o método serverSocket.accept(); mas não sei exatamente em que momento devo utilizálo novamente. Teria eu que fechar o Socket antigo e depois abrir um novo serverSocket.accept() para gerar um novo Socket ? Mas em que momento faria isso ?
Estou cheio de dúvidas pois a documentação não trata desta comunicação, apenas diz que tenho que implementar um Server Socket TCP/IP e responder as mensagens. Então a documentação trata muito especificamente das mensagens em sí, fala sobre o número da porta a ser usara, mas não fala mais nada sobre a implementação do servidor TCP/IP.
Peço ajuda dos colegas;
[]s.