Galera estou com o seguinte problema, desenvolvi uma aplicação servidor que fica escutando a porta 8081 quando novas conexões chegam, ela passa este socket para a classe grava.java que é uma thread onde cuidará desta conexão, em seguida fechara a conexao.
Então o main principal é apenas para receber as chamadas e repassa-las para a classe grava.java.
As conexões chegam a cada 1 minuto enviada por um dispositivo GPS.
Estou com 1 problema, na classe grava.java na linha 37 quando começo a fazer a leitura dos dados enviados, simplesmente ele para ali, e não continua, assim não fechando a conexão e nao podendo receber outras mais vindas do dispositivo, não dá nenhum exception, então não creio que seja erro na transferencia deve ser algo errado da minha parte.
Se eu mudar o codigo da linha 36 a 37 para o codigo da linha 39 a 41 ocorre o mesmo erro na linha 40 a aplicação para e não continua.
Se eu mudar o codigo da linha 39 a 41 para o codigo da linha 44 a 51 eu consigo pelo menos exibir o conteudo dos dados passados, mas parece que ao final da string o mesmo ocorre, simplesmente ele para mas desta forma consigo imprimir parte da mensagem.
Gostaria da opinião de vcs para me ajudar neste sistema servidor, pois não sei o que fiz errado.
Obrigado
Classe principal
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaservidorsocket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author Shakall
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//Declaro o ServerSocket
ServerSocket serv = null;
//Declaro o Socket de comunicação
//Declaro o leitor para a entrada de dados
try {
//Cria o ServerSocket na porta 8080 se estiver disponível
serv = new ServerSocket(8081);
while (true) {
//Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
Socket s = serv.accept();
if (s != null) {
new gravar(s).start();
}
}
//trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io
} catch (IOException e) {
//Imprime uma notificação na saída padrão caso haja algo errado.
System.out.println("Algum problema ocorreu para criar ou receber o socket.");
} finally {
try {
//Encerro o ServerSocket
serv.close();
} catch (IOException e) {
}
}
}
}
Classe grava
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaservidorsocket;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Shakall
*/
public class gravar extends Thread {
String dados;
Socket socket;
public gravar(Socket socket) {
this.socket = socket;
}
public void run() {
try {
System.out.println("Novos Dados: " + new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
InputStream in = socket.getInputStream();
/*BufferedReader entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
this.dados = entrada.readLine();*/
/*DataInputStream data=new DataInputStream(in);
dados=data.readUTF();
System.out.print(dados);
*/
/*byte vet[] = new byte[1];
StringBuffer aux = new StringBuffer();
while (in.read(vet, 0, vet.length) > 0) {
aux.append(new String(vet));
System.out.print(aux.charAt(aux.length() - 1));
vet = new byte[1];
}
this.dados = aux.toString();*/
System.out.println("Valor Recebido: "+this.dados);
} catch (Exception e) {
try {
erro.addDados("3: " + e.getMessage());
} catch (IOException ex) {
Logger.getLogger(gravar.class.getName()).log(Level.SEVERE, null, ex);
}
} finally {
try {
socket.close();
System.out.println("Fechou Socket");
} catch (IOException ex) {
try {
erro.addDados("4: " + ex.getMessage());
Logger.getLogger(gravar.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex1) {
Logger.getLogger(gravar.class.getName()).log(Level.SEVERE, null, ex1);
}
}
}
//arquivo.addDados(dados);
}
}