|
ganhdarva 님이 쓰신 글 :
: 답변에 감사드립니다..^^
: 한가지 더 물어보고 싶은것이 있습니다.
: ServerSocket을 쓸때 2개 이상의 클라이언트가 데이타를 보낼경우(1초의 오차도 없이 중복될경우)
: 두개의 클라이언트가 보낸 데이타가 섞여 버리더군요.
: 이것을 ServerSocket에서 구분해내서 처리할수 있는 방법이 있는지요?
: 가능하시면 예시를 들어 설명좀 부탁드립니다. ^^;;
:
안녕하세요?
ServerSocket이란게 특정 클래스를 말하는 것인가요?
만약 그렇다면 그 클래스 매뉴얼을 보셔야 해결이 됩니다.
윈속 라이브러리라면 그런 경우는 없습니다.
TCP라면 연결 하나당 소켓이 하나씩 설정되어 섞일수 없습니다.
UDP라도 일단 데이터가 들어오면 들어온 순서대로 차곡차곡 쌓이겠죠. 두 패킷이 섞이진 않습니다.
물론 큐안에서 각 클라이언트에서 보내온 패킷을 분리는 해야합니다.
recvfrom에서 상대의 주소를 알수 있고 순차적으로 분리하면 완전하게 분리됩니다.
공백없이 누적되므로 길이가 중요한데 그 길이를 알아내는 방법은 각자 알아서 해야 합니다.
UDP는 최소한의 기능만 제공하므로 그외의것은 서버설계하시는 분이 정하고 구현해야 합니다.
TCP역시 한 클라이언트가 보내온것일뿐 패킷은 계속 쌓이므로 그것을 분리하기 위한 프로토콜은 있어야 합니다.
거창하게 프로토콜이라고 했지만 분리가능한 약속이나 표식만 넣어줘도 됩니다.
길이를 무조건 1KB로 정한다거나 나름대로 패킷해더를 만들고 길이를 넣어 보내는 방법도 있습니다.
앞의 방법은 대역폭을 낭비하는 경우가 생기나 고속으로 처리할 수있겠죠. 길이를 구할 필요가 없으니...
후자는 반대로 원하는 대역폭만을 사용하지만 길이를 구하기 위한 처리가 필수적으로 필요합니다.
기본적으로 OSI계층이라든가 패킷의 캡슐화등의 개념은 있어야겠죠.
이부분은 개인적으로 공부하셔야하는 내용입니다.
보통 기초적인 소켓 교제에 설명이 되어 있습니다.
좀더 전문적으로 알아보고 싶으시면 TCP/IP에 관한책도 많습니다.
|