Olá a todos!
Estou desenvolvendo um programa, onde:
:!: Leio um TXT, que contém 10 linhas de strings (armazenando em uma List);
:!: Envio cada string da List através de um Socket e de uma PrintStream;
:!: Cada linha enviada eu:
---------> abro o socket
---------> seto o PrintStream
---------> mando a mensagem para um servidor (servidor está OK e não é JAVA);
Só que tenho um problema:
No for que lê cada mensagem da List, eu: Abro socket, seto o PrintStream, envio a string pro server.
Se eu não colocar um Thread.sleep(200), perde algumas mensagens, ou seja, eu envio 10 mensagens para o servidor, e ele recebe só 4 ou 6…
(Detalhe importante: fiz o mesmo código pra C# e funciona normalmente. o servidor recebe as mensagens numa pancada só!)
Código:
[code]Socket s = null;
PrintStream ps = null;
String tmpLine;
private class runThread implements Runnable
{
public void run()
{
try
{
//loop para mandar as mensagens lidas de uma List
for (int x = 0; x < messages.getItemCount(); x++)
{
//abre um socket para o IP:PORTA digitado nos txts
s = new Socket(txtIP.getText(), Integer.parseInt(txtPort.getText()));
txtStatus.setText("Enviando a mensagem " + (x+1));
//cria uma stream para enviar as mensagens
ps = new PrintStream(s.getOutputStream());
//pega a mensagem x da List (a List tem XX mensagens)
tmpLine = messages.getItem(x);
//manda a mensagem para o socket
ps.println(tmpLine);
ps.flush();
//se eu nao colocar um sleep, ele se perde e não manda todas as mensagens corretamente
Thread.sleep(500);
//fechando o socket....
s.close();
}
}
catch (Exception ioe)
{
//Se der erro:
jTextArea1.append("Erro:\n" + ioe.getMessage() + "\n" + ioe.getStackTrace() + "\n");
txtStatus.setText("Disconnected");
}
}
}
//CHAMADA DA THREAD NUM BOTÃO:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
Thread thr = new Thread(new runThread());
thr.start();
}
catch (Exception ex) { }
}[/code]
Tem algum jeito de fazer isso sem que eu tenha que conectar toda hora (talvez o problema seja esse), e enviar as mensagens pro servidor sem sleep???