Gente to com um problema aqui. Estou criando uma aplicacao que comunica com um servidor apartir de uma string, mas nao consigo fazer mais q um envio por classe Socket. Por exemplo:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(request.toCharArray());
bw.flush();
BufferedReaderbr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
String temp = "";
while((line = br.readLine()) != null){
temp += line;
}
na segunda vez que a funcao passa pela flush ele agarra e se eu uso close pra fechar o socket depois nao consigo abrir com socket.connect(...), e criar um socket pra cada vez q ele acessar compromete o desempenho do sistema, alguem pode me ajudar?
isso ai é onde, dentro de um servlet?
poste seu código completo.
você abre o seu reader/writter dentro desse método cada vez que é chamado? se for, feche apenas estes, mas não o socket… mantenha o seu OutputStreamWriter (e o InputStreamReader) em uma variável para fecha-lo também…
nao estou ultilizando servlet nao, é um servidor de socket mesmo, e eu ja tentei isso mas o engracado é que quando eu fecho apenas o stream o socket tbm fecha. ja tentei ultilizar shutdownInput/Output mas não da certo pq depois nao consigo acessar o stream do socket tbm.
ta mais… é uma aplicação JSE onde você inicia um servidor e ele abre os sockets para comunicação?
especifica mais detalhes do que você tem ai…
se for isso, que eu saiba quando você for ler o seu reader do socket, ele trava a thread corrente, por isso você precisa de uma outra thread apenas para a leitura de dados e a escrita você até pode deixar na thread padrão do seu software mais eu indicaria você a ter uma outra também…
tem que ver o que você tem ai, do jeito que você descreveu está meio vago…
Obrigado pela resposta, é uma aplicacao jse e abre socket para comunicacao com o servidor, o server sei q esta funcionando corretamente, o problema que estou tendo mesmo é com o cliente, estou postando a funcao que ultilizo pra conseguir retorno do server, esta funcao retorna uma string xml que depois deserializo ela:
public String getSocketResponse(String request) throws Exception{
Socket socket = new Socket(host,port);
socket.setSoTimeout(20000);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(request);
bw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
String temp = "";
while((line = br.readLine()) != null){
temp += line;
}
return temp;
}
pra cada hora que ele cria a classe socket ele reconecta é ai q me mata pq da um delay de uns 2 segundos por vez q acontece isso, e eu ultilizo a funcao mais ou menos umas 3 a 4 vezes dependendo do evento que o cliente estiver usando.