2012-12-21 3 views
0

내 응용 프로그램에서 다른 Bluetooth 장치 (수신 장치가 Android, Nokia, LG 등일 수 있음)에 Bluetooth를 통해 파일이나 텍스트를 보내려합니다. 서버가 데이터를 반환 할 때마다 파일을 보내려고합니다. 예를 들어 기후 수준이 주어진 특정 값 아래로 떨어지면 날씨를 확인하는 것입니다. 자동으로 블루투스를 통해 수신 장치로 데이터를 전송해야합니다. 사용자가 보낼 수 있도록 허용하지 않습니다. android Bluetooth API를 사용하여 어떻게 구현할 수 있습니까?일부 조건이 발생하면 Android Bluetooth API를 사용하여 블루투스를 통해 자동 파일 전송을 수행해야합니까?

또한 바이트 배열로 변환하여 블루투스를 통해 파일을 전송해야합니다. 나는 블루투스 채팅 예제를 통해 갔다. 1024 바이트 이상의 파일 크기는 전송할 방법을 의미합니다. 매번 1024 바이트 씩 전송해야하는지, 수신기 쪽에서 병합해야하는지, 아니면 더 좋은 방법이 있습니까?

미리 감사드립니다.

답변

1

내가 아는 한 세 가지 질문을하고 있습니다. 당신은 기본적으로 서버에 연결 열 (예를 들어 http을뿐만 아니라, 다른 TCP 나 UDP 기반 프로토콜 수 있습니다) : 서버에서 데이터를 반환이 때마다 파일을 전송하는 방법

  1. . 그런 다음 들어오는 데이터를 수신합니다. 데이터를 받으면 원하는 동작을 트리거합니다. 서버가 (세부 사항과 대안에 대한 문서를 참조 안된) http를 사용하지 않을 때 이러한 출발점에 대한 몇 가지 관련 전화입니다

    Socket s = new Socket('your.server.com', 47000); 
    s.connect(); 
    SocketChannel c = s.getChannel(); 
    ByteBuffer buffer = new ByteBuffer(1); 
    c.read(buffer); // blocks until bytes are available 
    
  2. 자동으로 블루투스 연결을 시작하는 방법 : 확보 대상 장치의 BluetoothDevice 개체에 연결 한 다음 BluetoothChat 데모 에서처럼 연결하십시오. 예는 실제 데이터 전에 파일 크기를 보내 (마음을 송신 측에 블록으로 데이터를 분할하고, 수신 측에서이를 재 조립해야 : 블루투스를 통해 파일/개 이상의 1024 바이트를 전송하는 방법

  3. , 수신기는 파일이 언제 완료되는지를 안다. 비교적 큰 바이트 버퍼를 사용할 수도 있습니다. 64KB의 최대 블록 크기를 사용하는 것이 좋습니다. 이렇게하면 너무 많은 시간 (시간)없이 블록을 다시 보내고 너무 많은 메모리를 소비하지 않게됩니다.

선발 3. 관련,이 같은 일이 송신 측의 핵심은 (검증되지 않은 및 오류 처리하지 않고, 단지 아이디어를 제공하기 위해) 수 :

// Send the file size 
OutputStream out = socket.getOutputStream(); 
ByteBuffer header = ByteBuffer.allocate(8); 
header.putLong(file.length(); 
out.write(header.array()); 

// Send the file in chunks 
byte buffer[1024]; 
InputStream in = new BufferedInputStream(new FileInputStream(file)); 
int length = in.read(buffer); 
while (length > 0) { 
    out.write(buffer, 0, length); 
    if (length < 1024) break; 
    length = in.read(buffer, 0, sizeof(buffer)); 
}; 

를 ... 그리고 수신 측 :

// Receive and unmarshal the file size 
InputStream in = socket.getInputStream(); 
ByteBuffer header = ByteBuffer.allocate(8); 
byte buffer[1024]; 
in.read(buffer, 0, 8); 
header.put(buffer); 
long filesize = header.getLong(); 
long receivedBytes = 0; 

// Receive the file 
OutputStream out = new BufferedOutputStream(new FileOutputStream(file)); 
int length = in.read(buffer); 
while ((receivedBytes < filesize) && (length > 0)){ 
    out.write(buffer, 0, length); 
    receivedBytes += length; 
    length = in.read(buffer); 
} 
if (receivedBytes != filesize) ... // Assure the transfer was successful 
+0

안녕하세요 domsom : 귀중한 답장을 보내 주셔서 감사합니다. 블루투스 채팅 샘플을 사용하여 블루투스를 통해 간단한 이미지 파일을 보내는 데 문제가 있습니다. 사실, 제 요구 사항은 블루투스를 통해 파일을 보냈습니다. 이제 이미지 파일을 보내려고합니다. 어떻게 버퍼 크기를 설정할 수 있습니까? 작은 데이터 청크를 수신자 측에서 결합하는 방법은 무엇입니까? 제발 당신의 코드를 나에게 알려주세요. –

+0

그 코드는 없지만 방금 아이디어를주기 위해 샘플 라인을 추가했습니다 ... – domsom

+0

두 개의 다른 프로젝트가 있습니다. 하나는 클라이언트이고 다른 하나는 서버입니다. 이제 블루투스 채팅 샘플을 수정하고 있습니다. 이 샘플에서는 채팅 메시지를 바이트 배열로 변환했습니다. 여기에 파일을 바이트 배열로 변환하고 바이트 배열 매개 변수를 전달해야합니다. 이제는 블루투스 채팅과 같은 양방향 커뮤니케이션을 구현하고 싶습니다.블루투스 채팅 같은 두 파일을 전송해야합니다. –

관련 문제