2012-05-31 2 views
0

Windows에서 Winsock2 API를 사용하여 게임 서버를 개발 중입니다.동일한 서브 네트워크와 다른 IP/사용자의 sockaddr_in 구조체 간의 차이점

내가 아는 주요 문제는 동일한 라우터/네트워크에서 제공되는 게임 클라이언트를 구별하는 방법을 모르는 것입니다. 동일한 네트워크에있는 2 명의 게이머가 동일한 라우터 IP 및 포트 (예 : IP 220.100.100.100 및 포트 5000)를 통해 인터넷으로 연결되는 것을 상상해 봅시다. C/C++ 서버가 TCP 연결을 어떻게 구분할 수 있는지, 두 게이머가 다른가요?

accept (...)가 반환 할 때 소켓을 반환하는 sockaddr_in 구조체의 차이점을 찾을 수 있습니까?

답변

1

두 명의 클라이언트 (게이머)가 라우터 뒤에있는 경우 소켓을 사용하여 클라이언트를 차별화하는 것이 어렵습니다.

TCP를 사용하는 경우 문제가되지 않습니다. 각 클라이언트는 고유 한 소켓을 통해 연결되므로 소켓에서 오는 모든 것을 알 수 있습니다. 그들이 처음 로그온 할 때, 나는 그들에게 자격 증명 (이름, 암호)을 제공하여 자격 증명을 소켓에 연결한다고 가정합니다.

UDP와 같은 연결없는 프로토콜을 사용하는 경우 처음 연락 할 때 고유 한 번호 또는 토큰을 제공합니다. 다음에 연락 할 때 메시지에 토큰을 포함시켜 식별 할 수 있도록해야합니다.

나는 뭔가를 놓친가요?

+0

대단히 감사합니다.이 작업은 로깅을 위해 TCP를 사용하고 keepAlive와 다른 종류의 UDP 기반 프로토콜을 사용합니다. 동일한 IP 및 포트의 소켓이 모두 내 서버에서 제대로 diferenciated 경우 그들을 통해 보내 모든 것들이 적절한 게이머에 도달 할 것입니다 ... 그럼 내가 끝났습니다 : D 조. TCP 로그인과 keepAlive 부분에서만 ... – user1428926

0

socket() 호출에 대한 소켓 설명자를 테스트하여 구별 할 수 없습니다. 보고?

관련 문제