Q&A

  • IP로만 서버소켓에서 클라이언트로 데이터 주고받는 방법좀 갈켜주세요
여러 클라이언트중 어떤한 클라이언트에서 온데이터를 서버소켓에서 받아서 어떤처리를 하고 다시 요청이 왔던 클라이언트에게만 데이터를 전송해야합니다. 사이트를 이리저리 뒤져보니 IP를 비교해서 클라이언트접속 순서를 알아서 보내는 방법은있던데 직접 IP를 이용해서 특정클라이언트에 보내는 방법이 없더라구요..접속순서를 알아서 보낼때는 한클라이언트가 요청을하면 서버소켓에서 받아서 처리하는동안 다른 클라이언트가 요청을하게되면 처음요청한 클라이언트에 가야할 데이터들이 두번째 요청한 클라이언트로 갑니다...
그래서 IP로 직접 보내면 정확하고 안정적일거라 생각해서요...
IP로 보내는 방법좀 알려주세요.....
2  COMMENTS
  • Profile
    바조로 2004.01.03 18:44

    저같은 경우는 필요에 의해서 브로드케스팅으로 보냈습니다만,
    그중에 특정 client에서만 사용해야 하는 경우는 Data에 구분자를
    두어서 구분해서 사용 했습니다.
    제가 알기로는 먼저 보낸 데이터가 먼저 도착한다는 보장은
    없는듯 싶으니 그점 감안하여 사용해야 시스템에 문제가 없을 듯
    합니다.

    도움이 될지 ......




  • Profile
    신호성 2004.01.03 18:24
    아마도 TServerSocket을 NonBlocking형식으로 사용하고 있는듯 싶습니다.
    NonBlocking형식에서는 각 사용자로 부터의 요청 메세지를 적절히 누적하고 처리하는 것과 접속자 목록을 관리하는 부분에 신경을 써야 합니다.
    세밀하게 처리하려면 그리 간단하지 않기 때문에 모든 것을 설명 드리기는 어렵구요. 일단 문의하신 IP를 기준으로 하는 방법도 명확한 방법은 아닙니다.
    같은 컴퓨터에서 두개 이상의 클라이언트 프로그램이 접속할 수 있기 때문에 IP를 기준으로 메세지 응답을 주는 방법은 적절하지 않습니다.
    서버소켓의 OnClientRead이벤트에서 메세지를 수신하고 처리하고 있을텐데요 해당 이벤트의 인수로 Socket: TCustomWinSocket 항목이 있습니다.
    이 Socket 인수에게 응답메세지를 보내시는 방법으로 처리를 하시면 될듯 싶습니다.