안드로이드 개발 질문/답변
(글 수 45,052)
블투를 가지고 데이터 전송을 하려 하는데 자꾸 read 부분에서 operation canceled가 나더군요..
이미지를 한쪽에서 다른쪽으로 보내는 건데 중간에 가다가 끈킵니다.
물론 android bluetoothchat 예제 부분에서 전송이랑 받는 부분만 살짝 고쳤습니다.
빨간부분이 operation canceled가 나는 부분입니다.
그냥 java소켓통신으로 저렇게 사용하면 이미지가 바로 정확히 전송 되는데
안드로이드에 가져다 사용하니 오류가 발생하네요...이미지도 들어오다 다 깨지게 되고~~
몇일째 씨름중인데 답변 주시면 감사하겠습니다.
//받는 부분
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
while(true){
try {
// client단에서 전송된 file내용 read 계열 stream
BufferedInputStream up = new BufferedInputStream(
mmInStream);
DataInputStream fromClient = new DataInputStream(up);
// 전송된 file명 reading
Log.d("socket","파일명 받기 대기중...");
//String filename = fromClient.readUTF();
//Log.d("socket",filename + "\t을 받습니다.");
Log.d("socket","\t을 받습니다.");
String files = Environment.getExternalStorageDirectory().getAbsolutePath()+"/abc.png";
// client단에서 전송되는 file 내용을 server단에 생성시킨 file에 write할수 있는 stream
FileOutputStream toFile = new FileOutputStream(files);
BufferedOutputStream outFile = new BufferedOutputStream(toFile);
int ch = 0;
while ((ch = up.read()) != -1) {
outFile.write(ch);
}
outFile.flush();
outFile.close();
fromClient.close();
//socket.close();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
connectionLost();
break;
}
}
}
//보내는 부분
public void writes(String filename) {
// String filename = null;
BufferedOutputStream toServer = null;
BufferedInputStream bis = null;
FileInputStream fis = null;
DataOutputStream dos = null;
try {
// filename = "c:\\Tmp\\BasketBall.png";
toServer = new BufferedOutputStream(mmOutStream);
dos = new DataOutputStream(mmOutStream);
//dos.writeUTF(filename);
fis = new FileInputStream(filename);
bis = new BufferedInputStream(fis);
int ch = 0;
// ? file내용 유무 check하면서 읽어 들임과 동시에 server단으로 전송
while ((ch = bis.read()) != -1) {
toServer.write(ch);
}
toServer.flush();
toServer.close();
fis.close();
// s.close();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}




write()가 read()보다 빨라서 엉키는것 같아요...
간단한 텍스트 한번만 512바이트미만은 쭉 들어가는데....
그 이상은 나누어서 보내게되고 그러면 여러번 들어가야하는데 뒤죽박죽으로 리슨되는것같아요....
참고하세요...