Socket pára de enviar dados

7 respostas
andre_udi

Ola amigos,

em um trabalho de faculdade, preciso fazer um servidor de jogos de sudoku.
esse servidor é feito em C; a cada cliente conectado, o socket respectivo ao cliente é passado para um novo processo q controla as acoes possiveis a serem realizadas pelo cliente. O cliente é feito em java. Porem, apos um determinada troca de dados entre o cliente e o servidor ( 82 bytes servidor -> cliente pra ser preciso ), qq nova mensagem enviada pelo cliente NAO chega no servidor. Em raras vezes ela chega com um delay mto grande, e o cliente nao consegue obter a resposta, já q ao testar se existem bytes pra serem lidos na inputstream do socket sempre é retornado zero.

Alguem poderia me ajudar?

Desde ja agradeço,

andre

7 Respostas

nbluis

Este socket está sendo fechado???

ViniGodoy

Você está dando flush() no seu socket?
Qual é o tempo de delay que você considera “muito grande”?

T

Você setou as opções do socket (TCP_NODELAY, acho que é setTcpNoDelay, http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html#setTcpNoDelay(boolean)
?

C

Pessoal aproveitando o topico do Andre a comunicaçao desta duas linguagem, em termos de socket, tem d fazer alguma moficaçoes (cast )nos inputs/outputs ou a comunicaçao se dah normalmente.
[/code]
try
{
BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str;
while ((str = rd.readLine()) != null)
{
process(str);
}
rd.close();
}
catch (IOException e)
{ }
}
[code]
Se alguem tiver um ex bem simples ai e puder mandar pra eu agradeço.Preciso do servidor em c e o cliente em java.
Ateh
Carlos Martins

ViniGodoy

Oi Carlos,

Não entendi exatamente qual o seu problema. Poderia explicar melhor?

T

andre_udi:
Em raras vezes ela chega com um delay mto grande

Isso é devido ao algoritmo de Nagle, ou seja, é necessário desligá-lo com o TCP_NODELAY.

Se não quiser usar TCP e sim UDP (orientado a mensagens) esse problema desaparece, mas você cria outro, que é o de o protocolo UDP não ser confiável (ou seja, mensagens podem perder-se).

andre_udi

ola amigos, obrigado pelas sugestoes e desculpem pela demora em responder.

qto ao erro, era uma falha em um painel q travava toda a aplicacao.

em uma das tentativas de resolver o problema, o utilizamos java.nio,
q se mostrou + rapida e + confiavel. fica a dica…

abraços,

andre

Criado 23 de fevereiro de 2007
Ultima resposta 20 de abr. de 2007
Respostas 7
Participantes 5