안녕하세요. 소켓통신을 통해 서버에서 값을 가져오려고 합니다.
asynctask를 사용해서 소켓연결 후 커맨드를 한 번 날린 뒤, 그에 해당하는 결과값을 가져옵니다.
소스는 아래와 같습니다.
protected String doInBackground(String... params)
{
String response="";
socket = new Socket();// 소켓 객체 생성.
SocketAddress sa = new InetSocketAddress(serverIp, serverPort);
try
{
int timeout = 5000;//타임아웃
socket.connect(sa, timeout);
if(socket.isConnected())
{
Log.e("소켓 connected","소켓 셋팅완료.연결되었습니다.");
}//conne
}
catch(IOException e)
{
return "timeover";
}
try
{
byteArrayOutputStream = new ByteArrayOutputStream(1024);
buffer = new byte[1024];//1024
int byteRead;
inputStream = socket.getInputStream();
socket.setSoTimeout(10000);
os = new BufferedOutputStream(socket.getOutputStream());
osw = new OutputStreamWriter(os);
osw.write(params[0]);
osw.flush();
Log.e("osw.flush();","osw.flush();");
while((byteRead = inputStream .read(buffer))!=-1)//!=0
{
byteArrayOutputStream.write(buffer,0,byteRead);
response+=byteArrayOutputStream.toString("UTF-8");//UTF-8
Log.e("response::",response);
}
Log.e("while break;","while break;");
return response;
}
catch(UnknownHostException e)
{
}
catch(Exception e)
{
}
Log.e("return null","return null");
return "null";
}
서버에서 배열값들을 갖고 오는데..중간에 값이 잘려서
잘리기 전까지 값만 받게 되는데요.
byteArrayOutputStream나 buffer의 size가 부족해서 그런것인가요..?
서버쪽에선 eof로 \0을 붙였습니다..setSoTimeout으로 read하는데 반응이 없으면 10초 기다렸다가 onpost로 가서 종료하는데요..
어쩔 땐 전체값이 다 받아와지는데 9할은 중간에 값이 끊깁니다.
혹은 값을 보낸 뒤, 값을 받는 텀이 짧아서 생기는 문제인걸까요..ㅠ