Eu gostaria de saber se essa é a maneira correta de enviar um arquivo .txt do meu sdCarde para o meu servidor via Bluetooth.
Segue os código da parte do Cliente e a parte do Servidor.
Cliente:
public class ClienteActivity extends Activity {
private EditText mensagem;
/**
* Botão de Envio
*/
private Button enviar;
/**
* Socket de Conexão
*/
private BluetoothSocket socket;
/**
* Fluxo de Entrada de Dados
*/
private InputStream input;
/**
* Fluxo de Saída de Dados
*/
private OutputStream output;
/**
* Manipulador de Mensagens
*/
private final Handler h = new Handler() {
public void handleMessage(Message msg) { // Manipular Mensagem
String content = (String) msg.obj; // Captura do Conteúdo da Mensagem
Toast.makeText(getApplication(), content, Toast.LENGTH_SHORT).show();
}
};
/**
* Envia Mensagens entre Fluxos de Execução
* @param message Mensagem para Envio
*/
public void alert(String message) {
Message m = h.obtainMessage();
m.obj = message;
h.sendMessage(m);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Cliente de Conexão Bluetooth
// Caixa de Texto
mensagem = (EditText) findViewById(R.id.mensagem);
// Botão de Envio
enviar = (Button) findViewById(R.id.enviar);
enviar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
final String conteudo = mensagem.getText().toString();
// Transferidor de Dados
Thread sender = new Thread(){
public void run() {
// Conteúdo para Envio
byte content[] = conteudo.getBytes();
try { // Possibilidade de Erro
//File sdcard = Environment.getExternalStorageDirectory().getPath()+"/DigiCerto/";
File file = new File(Environment
.getExternalStorageDirectory().getPath()
+ "/App/", "arquivo.txt");
FileInputStream in = new FileInputStream(file);
// Get the text file
// File file = new File(sdcard,"producao.txt");
// Read text from file
output = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(output);
BufferedWriter writer = new BufferedWriter(osw);
writer.write(file.getName() + "\n");
writer.flush();
int tamanho = 4096; // buffer de 4KB
byte[] buffer = new byte[tamanho];
int lidos = -1;
while ((lidos = in.read(buffer, 0, tamanho)) != -1) {
System.out.println(lidos);
output.write(buffer, 0, lidos);
}
output.flush();
//output.write(content.length); // Tamanho do Conteúdo
//output.write(content); // Conteúdo Propriamente Dito
// Aviso de Sucesso ao Usuário
alert("Texto Enviado");
} catch (IOException e) { // Erro Encontrado
// Aviso de Erro ao Usuário
alert("Erro na Transferência");
}
}
};
// Executando o Fluxo de Processamento
sender.start(); // Inicialização
}
});
// Requisição do Adaptador
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null) { // Não há Bluetooth
// Mensagem de Erro ao Usuário
alert("Adaptador não Encontrado");
finish();
}
if (!adapter.isEnabled()) { // Bluetooth Habilitado?
// Mensagem de Erro ao Usuário
alert("Bluetooth Desabilitado");
finish();
}
// Dispositivos Pareados
Set<BluetoothDevice> devices = adapter.getBondedDevices();
// Servidor Bluetooth
BluetoothDevice server = null;
String servername = "ANALISTA"; // Nome do Servidor
// Pesquisa do Servidor Pareado
for (BluetoothDevice device : devices) { // Laço de Busca
if (servername.equals(device.getName())) { // Nomes Idênticos?
server = device; // Dispositivo Encontrado e Selecionado
}
}
// Dispositivo Encontrado?
if (server == null) {
// Mensagem de Erro ao Usuário
alert("Servidor não Pareado");
finish();
}
// Servidor Bluetooth
final BluetoothDevice computer = server;
// Abrindo a Conexão
Thread connector = new Thread(){
public void run() {
// Identificador Único do Servidor
UUID ident = UUID.fromString("4219a890-1ec3-11e2-81c1-0800200c9a66");
try {
// Socket de Conexão
BluetoothSocket s =
// Conexão a Partir do Identificador Único
computer.createRfcommSocketToServiceRecord(ident);
// Conectar ao Servidor
s.connect(); // Execução Bloqueante
// Fluxos de Entrada e Saída de Dados
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
// Captura de Objetos
socket = s; // Socket de Conexão
input = in; // Fluxo de Entrada de Dados
output = out; // Fluxo de Saída de Dados
// Informar sobre Conexão
alert("Conexão Aberta");
} catch (IOException e) { // Erro de Entrada e Saída de Dados
// Mensagem de Erro ao Usuário
alert("Erro de Conexão");
finish();
}
}
};
// Executando o Fluxo de Processamento
connector.start(); // Inicialização
}
public void onDestroy() {
super.onDestroy(); // Método Sobrescrito
if (socket != null) { // Socket Configurado?
try {
socket.close(); // Fecha Conexão
} catch (IOException e) { // Erro Encontrado?
// Mensagem de Erro ao Usuário
alert("Erro ao Fechar Socket");
}
}
}
E agora a parte do servidor para receber o arquivo:
[code]public class Server implements Runnable{
@Override
public void run() {
String uuid = "4219a890-1ec3-11e2-81c1-0800200c9a66";
// Endereço para Conexão
String address = "btspp://localhost:" + uuid.replace("-", "");
try {
// Abertura de Conexão
StreamConnectionNotifier notifier =
(StreamConnectionNotifier) Connector.open(address);
// Fluxo de Conexão
StreamConnection stream = notifier.acceptAndOpen();
// Captura de Fluxos
InputStream input = stream.openInputStream();
OutputStream output = stream.openOutputStream();
// Laço de Repetição
int size; byte content[]; // Auxiliares de Leitura
String message = ""; // Mensagem Enviada pelo Cliente
// while (!message.equals("SAIR")) {
// Tamanho dos Dados
//size = input.read(); // Quantidade de Bytes
// Buffer de Leitura
// content = new byte[size];
// Preenchimento dos Dados
// input.read(content); // Entrada de Informação
// Transformação da Mensagem Enviada
// message = new String(content); // Novo Elemento
// // Exibição na Saída Padrão
// System.out.println(message);
// WriteFile(content.toString());
// }
InputStream in = stream.openInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(isr);
String fName = reader.readLine();
System.out.println(fName);
File f1 = new File("D:/" + fName);
FileOutputStream out = new FileOutputStream(f1);
int tamanho = 4096; // 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 (IOException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}[/code]
Espero que possam me ajudar, minha dúvida é so como enviar o arquivo mesmo.
Obrigado.
Que está nesse trecho da parte do cliente:
File file = new File(Environment.getExternalStorageDirectory().getPath()
+ "/App/", "producao.txt");
FileInputStream in = new FileInputStream(file);
output = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(output);
BufferedWriter writer = new BufferedWriter(osw);
writer.write(file.getName() + "\n");
writer.flush();
int tamanho = 4096; // buffer de 4KB
byte[] buffer = new byte[tamanho];
int lidos = -1;
while ((lidos = in.read(buffer, 0, tamanho)) != -1) {
System.out.println(lidos);
output.write(buffer, 0, lidos);
}
output.flush();
Obrigado desde já.