윈됴소켓.. -_- +
글쓴이: towngo / 작성시간: 수, 2003/04/09 - 9:21오전
음.. 요즘 간단한 게임을 만들고 있는데.. 클라이언트쪽 소켓이 계속 말썽이네요.. 서버는 리눅스구 클라이언트는 윈됴인뎅.. 리눅스로 만든 클라이언트는 문제가 없는데.. 아 물론 로컬에서 테스트하지 않고 리모트로 해서 윈됴랑 같은 환경에서 했는데 이렇쿤요.. -_- +
며칠전에 질문했었는데.. send() 후 바로 다음 라인에서 close()를 하면 윈도쪽에선 못 받네요.. 첨엔 서버에서 패킷을 그냥 비워버리는줄 알았는데.. 리눅스로 클라이언트를 만들어 해 보니 잘 들어오는군요.. 헐..
클라이언트가 이런이런 이유로 종료된다구 알려주고 소켓을 끊는건뎅..
음.. 클라이언트가 종료된다구 받으면 소켓을 끊어야 하낭.. 떱..
윈됴는 잘 모르는디.. 이건 경우 얼케 해야 할까요..
간단한 해결은 send후 sleep을 거는건뎅.. 그렇게 하면 어떤 조건에 걸린 플레이어들이 많을 경우 게임이 잠시 멈추는..... -_-;
혹시 어떤 아이디어가 있으시면 리플 좀.. ^^a
Forums:
자세한 상황을 이글에서는 알기 어렵지만....
send() 를 서버쪽에서 하는지 클라이언트 쪽에서 하는지 명시가 안되어 있군요.
뭐 어느쪽이든지 비슷하겠지만 서버쪽에서 send하고 close()를 한다고 생각하면,
아래 방법으로도 한번 테스트 해보세요 될지도 모르니...
첫번째 방법은 send후 close를 하는것이 아니라
shutdown으로 write만 halt close를 하는것 입니다.
자세한 것은 관련 문서나 서적을 찾아보시면 될것이고...
두번째 방법은 서버쪽에서 send 한다는 상황에서
서버쪽에서는 send() , recv(), close()
클라이언트 recv(), send(), close()
위 순서로 서버쪽에서 전송후 응답을 오면 close 하고,
클라이언트에서는 수신후 수신했다는 응답을 보내고 close() 호출
위에 두가지 방법으로 테스트 해보시고 그래도 안되면,
다른쪽에 문제가 있죠. 일단 코드를 안 보고 생각해본 해결책입니다..쩝..
shutdown 함수를 살펴보세요.
윈도와 리눅스(유닉스) 의 소켓은 비슷하지만 약간의 차이가 있더군요.
소켓 API 메뉴얼에서 shutdown() 을 살펴보세요.
다 받거나 보내기를 보장할려면 shutdown을 쓰라는 문구가 있습니다.
그럼.
폐인, 노가다 그 끝은..?
댓글 달기