|
주고받는 패킷의 맨 앞쪽에 고유인식번호를 넣어서 그걸로 정상적 패킷과 비정상적 패킷을 구분하면 될 것 같네요..
예를 들어서 채팅 패킷의 경우는...
typedef struct
{
BYTE Cmd; // 채팅 패킷의 경우 인식자를 0x01로 규정한다.
char Name[20]; // 이름
char ChatMsg[100]; // 채팅 내용
} PACKET_CHAT;
이런 식으로 해서 패킷을 받은 다음에 Cmd의 값이 0x01이 아니면 잘못된 패킷이므로 접속을 끊으면 되겠죠..
위의 예는 아주 간단한 경우를 말한거고요.. 좀 더 깊이 들어가면 복잡한 여러가지 경우가 생깁니다..
TCP의 특성상 클라이언트에서는 100바이트를 보냈는데, 서버는 50바이트만 받는다거나, 100Byte씩 2번을 보냈는데, 서버에서는 한꺼번에 받는다거나... 그런 경우가 종종 생깁니다..
zeFa 님이 쓰신 글 :
: TCP로 서버와 클라이언트를 만들었는데요.
: 기본적인 데이터 처리는 되는데..
: 혹시라도 문제가 있는 패킷이 왔을경우 서버나..
: 클라이언트가 응답을 하지못하여 애러가나는 현상을 처리하는방법을 알고싶습니다.
:
: 쓰다보니 말이조금이상한거 같네요 ;; ㅎㅎ
:
: 그리고
: Excute()
: {
: m_pStream = new TWinSocketStream(ClientSocket, 120000);
: while(!Terminated&&ClientSocket->Connected)
: {
: ...
: }
: if(PeekMessage(...))
: {
: switch(Msg.Message)
: {
: case WM_OPEN:
: Open();
: break;
: }
: }
:
: }
:
:
: 이런식의 코드는 이상한건지. ;;
: 서버 안쪽에서 메세지로 이벤트를 발생시킬려는데 PeekMessage가 작동을 안하는거 같아서요 ;;
: 답변부탁드릴께요..
: ;;;;
|