|
박정만 님이 쓰신 글 :
: 인디 서버 소켓에서 Connection->WriteBuffer()를 연달아 2번 쓰면, 첫번째 보낸건 가는데, 두번째에 보낸건 안갑니다.
:
: 그런데, 한 번 더 WriteBuffer() 하면 두번째로 보낸것이 그때서야 도착하는 기현상이 생기더군요..
:
: 그러니깐.. Packet1과 Packet2를 동시에 연달아서 보낼때...
:
: WriteBuffer(&Packet1, sizeof(Packet1), false); -> 클라이언트가 정상적으로 받음
: WriteBuffer(&Packet2, sizeof(Packet2), false); -> 클라이언트가 받지 못함
:
: 나중에 Packet3를 보낼때..
: WriteBuffer(&Packet3, sizeof(Packet3), false); -> 아까 받지 못한 Packet2가 도착,
:
: 또 나중에 Packet4를 보내면, 바로 전에 안왔던 Packet3가 도착하는 식이죠.. -.-
:
: 어떻게 해결하죠? 이것때문에 몇일동안 진도가 안나가고 있습니다.. 제발 살려주세요.. Y_Y
제가 인디콤포넌트는 한번도 안써봐서 잘모르겠지만
보통 소켓통신에선 패킷을 보낼때 먼저 소켓에 할당된 버퍼에 채워지고
그리고 나서 상대편으로 보내는데요 보내고나면 버퍼안에 있는 패킷의 지워집니다.
물론 아직 보내지 않았으면 버퍼안에 패킷이 남아 있지요.
버퍼안에 패킷이 남아 있을때는 다른패킷을 전송할려고 해도 전송할수가 없거든요.
아마도 이경우가 아닐까 생각이 드는데요.
추측컨데 인디콤퍼넌트안에서 전송에 실패하면 전송할려고 하는 패킷은 자기가 가지고 있는
버퍼에다 저장을 하고 다음번 전송명령을 보낼때 그 패킷을 보내는게 아닐까 생각이 드는데요
그래서 지금 연속으로 패킷1,패킷2 를 보내지 말고
패킷1 을 보내고 난다음 약간의 delay 를 주고 패킷이 보내지길 기다린다음에 패키2를
한번 보내보세요 ,
이래도 안되면 내가 위에쓴 글은 다 잇어버리세요 ^^
|