[Resolvido] Transferencia de arquivos J2ME > J2EE via socket

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! :wink:

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) {}
            }
        }
    }
}

Uma coisa que encontrei, após efetuar um outro tratamento de exceção é que no cliente ele não estava lendo o arquivo do lugar certo.

pois estou lendo o arquivo teste.txt do computador

entao no Cliente1 linha 24 eu mudei para isto:

FileConnection fcup = (FileConnection)Connector.open("file:///root1/teste.txt");

até já superei o problema do root not acessible, mas sempre diz que o arquivo teste.txt não existe.

já criei o arquivo aqui
C:\Users\Bernardo\j2mewtk\2.5.2\appdb\DefaultColorPhone\filesystem\root1

e na pasta de isntalacao do WTK tbm:

C:\WTK2.5.2_01\j2mewtk_template\appdb\DefaultColorPhone\filesystem\root1

mas ainda assim, diz que o arquivo nao existe…

alguma ideia?

Bom, consegui resolver…

Preciso criar o arquivo no root1 de onde o netbeans guardou as configurações do sdk do javame, no caso aqui ficou em:

C:\Users\Bernardo\javame-sdk\3.0\work\4\appdb\filesystem\root1

dentro da pasta work, ele tem 10 diretorios, aonde cada um guarda as configurações para ser usada com cada um dos modelos disponiveis de emuladores, no meu caso utilizo o modelo DefaultCldcMsaPhone, que é o quarto da lista.

Problema resolvido e a comunicação via sockets funcionou, criando o arquivo no destino…

Fica aí registrado se mais alguém tiver o mesmo problema :wink: