Boa tarde pessoal!
Estou com problemas para enviar mais de um arquivo via socket…
Se eu tento enviar os arquivos um a um, o meu servidor recebe corretamente, porém, quando tento enviar dentro de um laço de repetição verificando todos os arquivos da pasta, ele gera apenas um arquivo no servidor com o tamanho igual a soma dos tamanhos dos arquivos. =\
Sei que o correto seria implementar um protocolo de comunicação, mas não tenho idéia de como faze-lo. Mas a única coisa próxima disso que encontrei foi “KnockKnockProtocol”.
Se alguém puder me ajudar com alguma dica, lhe serei muito grato! rsrs
Segue abaixo o meu código para que vocês possam criticar alguma coisa também.
import java.io.*;
import java.net.Socket;
public class ListFiles {
public static void main(String[] args) {
File dir = new File("c:\\receive\\pqp");
String [] children = dir.list();
FileInputStream in = null;
OutputStream out = null;
OutputStreamWriter osw = null;
BufferedWriter writer = null;
File f = null;
if (children == null) {
// Either directory does not exist or is not a directory
}
else
{
try
{
Socket socket = new Socket("localhost", 5678);
for (int i=0; i<children.length; i++)
{
// Get filename of file or directory
String filename = children[i];
System.out.println("Filename...");
try
{
f = new File("C:/receive/pqp/" + filename);
System.out.println(f.getName());
in = new FileInputStream(f);
out = socket.getOutputStream();
osw = new OutputStreamWriter(out);
writer = new BufferedWriter(osw);
writer.write(f.getName() + "\n");
writer.flush();
int tamanho = (int) f.length(); // buffer de 4MB
byte[] buffer = new byte[tamanho];
int lidos = -1;
while ((lidos = in.read(buffer, 0, tamanho)) != -1)
{
out.write(buffer, 0, lidos);
System.out.println("Lidos = " + lidos);
if (lidos == tamanho){
System.out.println("BREAK!");
break;
}
}
out.flush();
writer.flush();
}
catch (Exception e)
{
e.printStackTrace();
}
finally{
System.out.println("FINALLY!");
in.close();
out.flush();
osw.flush();
//writer.close();
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
Desde já agradeço!