Olá pessoal!
Estou iniciando na programação com sockets, e depois de muito procurar cheguei a solução a baixo.
O meu problema é o seguinte, preciso transferir arquivos do celular (cliente )para o computador (servidor).
Acontece que o computador chega a criar o arquivo de destino c:\teste.txt mas o arquivo fica com tamanho zero, sem conteudo.
O arquivo de origem está no d:\teste.txt e possui algumas linhas de texto.
Não sei o que posso estar fazendo de errado no meu código, se alguém puder ajudar, aí vai!
Cliente
package tcc;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.io.file.FileConnection;
public class Cliente1 {
private SocketConnection client;
private DataInputStream Input;
private DataOutputStream Output;
public void main(String []args){
StartSocket();
}
public void StartSocket(){
new Thread(){
public void run(){
try {
client = (SocketConnection) Connector.open("socket://127.0.0.1:6789",Connector.READ_WRITE);
Output = client.openDataOutputStream();
Input = client.openDataInputStream();
FileConnection fcup = (FileConnection)Connector.open("file:///d:/teste.txt");
DataInputStream fdis = new DataInputStream(fcup.openDataInputStream());
byte[] buffer = new byte[512];
int readed = -1;
while ((readed = fdis.read(buffer))!= -1){
Output.write(buffer,0,readed);
}
Output.flush();
client.close();
} catch (IOException ex) {
}
}
}.start();
}
}
E o servidor
import java.io.*;
import java.net.*;
public class Servidor1 {
public static void main(String[] args) {
try {
ServerSocket welcomeSocket = new ServerSocket(6789);
System.out.println("Servidor Iniciado na Porta 6789;");
System.out.println("Iniciando Listener...");
while (true) {
Socket connectionSocket = welcomeSocket.accept();
String newID = "teste";
System.out.println("Ok ");
TcpThread t = new TcpThread(connectionSocket, newID);
t.start();
}
} catch (IOException ex) {
System.out.println("Ocorreu um Erro: " + ex.getMessage());
}
}
static class TcpThread extends Thread {
Socket socket;
DataInputStream Sinput;
DataOutputStream Soutput;
boolean SocketNotClosed = true;
String SocketID = "";
TcpThread(Socket socket,String SocketID){
//Confirma que o Socket está aberto
SocketNotClosed = true;
//Socket
this.socket = socket;
}
public void run(){
byte[] buffer = new byte[512];
try{
//Abre o Output com o Socket.
Soutput = new DataOutputStream(socket.getOutputStream());
//garantia de Output limpo.
Soutput.flush();
//Abre o Input com do Socket.
Sinput = new DataInputStream(socket.getInputStream());
byte save[] = new byte[512];
BufferedOutputStream bos = new BufferedOutputStream(new DataOutputStream(new FileOutputStream("c:\\teste.txt")));
while(Sinput.read(save)!=-1)
{
//System.out.println("In server "+dis.read(save));
bos.write(save);
}
bos.close();
}catch(Exception ex){
System.out.println("1)Ocorreu um Erro: " + ex.getMessage());
}finally{
//Fecha as conexões caso elas ainda existam.
try {
Soutput.close();
Sinput.close();
}catch (Exception e) {}
}
}
}
}