package com.example.at;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
public class ImageSR extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_sr);
}
public static class ImageNetwork extends AsyncTask<String, String, String> {
String dstAddress;
int dstPort;
String response;
Bitmap b;
String name, ocrresult;
ImageNetwork(String addr, int port, Bitmap b, String name) {
dstAddress = addr;
dstPort = port;
this.b = b;
this.name = name;
}
public byte[] bitmapToByteArray(Bitmap $bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
$bitmap.compress(CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
return byteArray;
}
@Override
protected String doInBackground(String... arg0) {
try {
// 소켓 생성
Socket socket = new Socket(dstAddress, dstPort);
// 서버에서 보내줄 OCR결과 받을 스트림 생성
DataInputStream dis = new DataInputStream(socket.getInputStream());
// 데이터 전송용 스트림 생성
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
System.out.println("파일 전송 작업을 시작합니다.");
// 파일 이름 전송
// String fName = "작업용a.txt";
// String fName = "피티a.ppt";
// String fName = "작업용a.jpg";
dos.writeUTF(String.valueOf(bitmapToByteArray(b).length));
System.out.printf("파일 이름(%s)을 전송하였습니다.\n", name);
// 파일 내용을 읽으면서 전송
BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(bitmapToByteArray(b)));
int len;
int size = 4096;
byte[] data = new byte[size];
while ((len = bis.read(data)) != -1) {
dos.write(data, 0, len);
}
dis.readUTF();// 이부분이 끼면 서버 전송중에 멈춥니다...
dis.close();
socket.close();
dos.flush();
dos.close();
bis.close();
System.out.println("파일 전송 작업을 완료하였습니다.");
System.out.println("보낸 파일의 사이즈 : " + bitmapToByteArray(b).length);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "파일이름:" + name + " 사이즈:" + String.valueOf(bitmapToByteArray(b).length);
}
}
}
현재 하고싶은것은
파일을 넘겨주면 파일받구 다시 그파일 받았다고 메세지를 writeUTF해주는데
writeUTF까지는 이상없는데 안드로이드 어싱크에 readUTF만 끼면 서버가 멈춥니다.
이유가 멀까요 스크림 생성하는건 문제가 없는데