|
멀더입니다...
이문제도 아주 고전적인 문제입니다.
해결책도 아주 많다는 겁니다.
이미 Internet을통한 TCP나 UDP 통신을 하는 많은 프로토콜이 만들어져 있죠
대표적인게 SMTP, HTTP, IMAP, FTP등...
이런 프로토콜이 님께서 문제를 제기한 문제를 어떻게 풀고 있는지, 해당 RFC를 보면
알수 있을겁니다...
위의 프로토콜을 이용해도 별문제가 없으면 위의 프로토콜중 하나를 사용하시어
편하게 필요한데로 바꾸셔서 사용하시면 좋을듯합니다.
그리고 질문중 서버나 클라이언트가 상대방이 전송한 데이터를 다받았는가 ??? 를 체크하는건
순전히 프로토콜핸드쉐이킹의 문제입니다.
즉 자동으로 알수는 없다는거죠...
예로, SMTP의 경우 위와같은 문제를 해결하기 위해 하나의 프로토콜페이지마다 CRLF를 사용하고
두줄이상의 스트림데이터인 DATA 부분의 마지막은 CRLF+DOT+CRLF 로 체크합니다.
위의 internet standard protocol의 경우를 제외한
복잡한 비표준 protocol 일수록 구조적인 패킷을 만들어서 encoding과 decoding을 하는데
network game같은 경우가 이런방식으로 하는경우가 많죠. (보안모듈도 포함시키고)
대략 문자열 파싱정도라고 생각하면 맞습니다.
이상의 저의 생각이고,,, 처음에 언급했던것처럼 해결책은 아주 다양합니다.
이주호 님이 쓰신 글 :
: C++ builder 6.0에 있는 Component tab의 internet tab에 있는 소켓을 사용하여
: C/S 프로그램을 만들고 있습니다.
:
: Client(n):Server(1) 개념으로 개발을 하고 있습니다.
: 1. TClientSocket 사용(client 프로그램)
: -Type => stNonBlocking
: 2. TServerSocket 사용(Server 프로그램)
: -Type => stNonBlocking
:
: 3. 궁금한점은 Client에는 Server쪽으로 보낸 데이타를 확인하는 방법을 알고 싶습니다.
: 1) Client에서 Server쪽으로 보낸 데이타를 서버에서 모두 받았는지
: 모두 받지 못하였을 경우 다시 받는 방법이 궁금하여 이렇게 질문을 합니다.
: 2) Client에서 데이타전송
: Server에서 읽음
: Server에서 읽은 데이타가 정확하지 않거나 일부분만 받음
: Client에서 재 전송 시도
: 3) 위 같은 방법으로 해야 될 것 같은데
: 무엇을 어떻게 해야 할지 망막하여 부탁드립니다.
:
: 혹시 위와 같은 문제를 해결하는 방법(알고리즘) 및 소스를 가지고 계시면 리풀 달아 주시거나 메일 부탁드립니다.
|