안드로이드 소켓통신 중 클라이언트 전송에서 궁금한게 있어서 질문합니다~
안녕하세요 안드로이드 초보 개발자입니다~
안드로이드 클라이언트, C# 서버로 소켓통신하는 어플을 만드는 중인데요
먼저 다음 소스처럼 클라이언트에서 전송을 3번 해주고
---------------------------------------------------------
sendMessage(A);
sendMessage(B);
sendMessage(C);
private void sendMessage(String MSG) {
try {
streamOut.println(MSG);
} catch (Exception ex) {
logger(ex.toString());
}
}
----------------------------------------------------------
서버에서 reciever를 3번 해줍니다
----------------------------------------------------------
bufferCount = socket.Receive(buffer);
A = BufferClear(buffer, bufferCount);
bufferCount = socket.Receive(buffer);
B = BufferClear(buffer, bufferCount);
bufferCount = socket.Receive(buffer);
C = BufferClear(buffer, bufferCount);
----------------------------------------------------------
위와 같이 하고 구동을 해보면 A에서는 문제 없이 잘 전송받는데
서버의 B에서 클라이언트의 B와 C를 둘다 받아버립니다
위와 같은 소스면 3번째 리시버에서 계속 전송을 기다리고 있는 상태가 되고
3번째 리시버를 지워주고 B를 출력해보면 B안에 BC가 둘다 들어있는
상태가 되있었습니다
여기서 막혀서 아무것도 못하고 있는데 도움을 받고 싶습니다
댓글 남겨주세요 ㅠㅜ
공지 다 읽었습니다!
모두 연결하면 "140.7123.9" 라는 문자열을 보내셨나요? 그럼 받는 쪽에서 "140.7123.9"라는 문자열을 어떻게 3개의 숫자로 분리할 수 있을까요?
방법이야 수없이 많겠습니다만, 보내는 쪽에서 숫자와 숫자 사이에 별도로 지정한 구분자를 함께 전송하면 어떨까요? 예를 들어, 쉼표(,) 등을 숫자와 숫자 사이에 들어가는 구분자로 사용해보죠.
그러면 전송할 때 "1,40.7,123.9" 이런 문자열을 전송하게 되고, 받는 쪽에서는 문자열을 받아서 쉼표로 구분해 문자열을 잘라내고, 다시 잘라낸 각자의 문자열을 숫자로 변환할 수 있지 않을까요?
차근차근 논리적으로 생각해보시면 어렵지 않습니다.




http://msdn.microsoft.com/en-us/library/ec8ybzs0.aspx
보다시피 배열로 지정한 만큼 받고, 실제로 받아진 바이트수를 리턴합니다.
자바에서 1글자씩 3번 전송하건, 3글자로 1번 전송하건 완전히 동일합니다. 받을 때도 보내는 쪽에서 몇 번을 보냈건 데이터만 오기 때문에 데이터만 보고 원하는 값으로 분리해야 합니다.
받는 쪽 B에서 버퍼의 크기가 얼마나 되나요? 한글자씩 분리해서 저장하려면 1) 받는 버퍼의 크기를 1로 조절하거나, 2) 받아진 바이트수를 확인해서 A, B, C 값으로 분리할 수 있겠군요.