마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

소켓통신으로 서버->클라이언트 값 가져올 때

0 추천

안녕하세요. 소켓통신을 통해 서버에서 값을 가져오려고 합니다.

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할은 중간에 값이 끊깁니다.

혹은 값을 보낸 뒤, 값을 받는 텀이 짧아서 생기는 문제인걸까요..ㅠ

질문 님이 2017년 12월 21일 질문
2017년 12월 21일 수정

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...