"Necessidade"
Olá Pessoal, estou com um pequeno grande problema com sockets que é o seguinte:
Tenho um cliente com um programa de loja desktop e coloquei um módulo nesse programa para o cliente fazer backup do banco de dados.
Até aí beleza, o cliente clica la pra salvar o backup, o arquivo sql é gerado tudo beleza. Agora estou tentando implementar um meio de quando o cliente
clicar pra fazer o backup, por meio de sockets ele se conectar com uma maquina servidor que tenho e enviar pela rede esse arquivo de backup do banco de dados para o meu servidor,
de modo que além do backup ficar salvo na maquina dele, o backup seja transferido para o meu servidor também.
"Implementação"
Daí, busquei ajuda na net, mais um pouquinho de conhecimento que tinha também, cheguei num código fonte que faz essa transferencia via sockets pra mim, porém testando aqui
na minha maquina eu transfiro arquivos de texto com menos de 4096 bytes com perfeição e rapidez, mas, quando o arquivo se trata do backup do banco de dados que tem em média
20480 bytes é lançada uma exceção que diz o seguinte:
Out 21, 2012 5:36:22 AM MenuP.Principal enviaParaOServidor
Grave: null
java.net.ConnectException: Connection timed out: connect
Então agora recorro a vocês, para tentarem me ajudar a melhorar esse código de forma que ele aceite transferencia acima de 4096, ou o que estou fazendo de errado nisso tudo,
segue abaixo os códigos cliente/servidor:
OBS: Notem que nos meus 2 vetores de bytes está comentado 4kb, isso é porque antes eu tinha implementado os vetores de tamanho 4096, mas como 4096 não é o tamanho que me serve aumentei para o tamango de 20kb na tentativa de acerto, mas não funcionou e deu o erro citado acima de perda de conexão por demora.
Cliente
FileInputStream in = null;
try {
File f = new File(Arquivo);
in = new FileInputStream(f);
Socket socket = new Socket("192.168.2.10", 5678);
OutputStream out = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter writer = new BufferedWriter(osw);
writer.write(f.getName() + "\n");
writer.flush();
int tamanho = 20480; // buffer de 4KB
byte[] buffer = new byte[tamanho];
int lidos = -1;
while ((lidos = in.read(buffer, 0, tamanho)) != -1) {
out.write(buffer, 0, lidos);
}
} catch (UnknownHostException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
}
Servidor
[code]try {
ServerSocket server = new ServerSocket(5678);
Socket clSocket = server.accept();
InputStream in = clSocket.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(isr);
String fName = reader.readLine();
System.out.println(fName);
File f1 = new File(“CaminhoDaMinhaMaquinaServidor\ArquiNovo.sql”);
FileOutputStream out = new FileOutputStream(f1);
int tamanho = 20480; // buffer de 4KB
byte[] buffer = new byte[tamanho];
int lidos = -1;
while ((lidos = in.read(buffer, 0, tamanho)) != -1) {
System.out.println(lidos);
out.write(buffer, 0, lidos);
}
out.flush();
} catch (IOException e) {
}[/code]
Desde já fico muito agradecido, Abraços