|
패킷 fragmentation 처리를 제대로 하셨나 모르겠네요.
윈도우 비스타 이후 커널은 TCP/IP쪽 성능도 비약적으로 향상되어서 처리속도가 매우 빠릅니다.
그래서 송신측에서 100 바이트를 보내면,
받는 쪽은 60바이트 받고 리턴하고,
나머지 40바이트 받고 리턴하고 이렇게 2번 리턴하는 경우도 생깁니다.
이런 것에서 오는 문제일 가능성이 높군요.
recv 함수에 100바이트 넣었다고 100바이트를 다 받을 때까지 기다리지 않습니다.
60바이트만 받아도 시간되면 리턴하죠.
실행 결과는 정상 리턴.... 왜냐면 못 받은게 아니라 60바이트는 받았으니까요.
참치잉... 님이 쓰신 글 :
: WinXP에서 만든 어플리케이션을 이용해 TCP/IP 통신을 하여 장비를 제어하고 데이터를 취득합니다.
:
: 어플리케이션에서 장비에게 먼가 작업을 하라는 메시지를 담은 패킷을 전송하게 되면,
: 장비는 그 패킷을 수신하여 분석한 후, 해당 작업을 수행하고..
: 해당 작업 완료 여부에 대한 메시지를 담은 패킷을 어플리케이션으로 전송해줍니다.
: 어플리케이션은 수신된 패킷을 분석하여 작업이 완료가 되었는지, 실패했는지 판단하게 됩니다.
:
: WinXP에선 아주 잘 됩니다. 장비로 메시지 보낼 경우 즉각적으로 장비가 반응하여 해당 작업을 수행하고, 그 작업에 맞는 완료여부 메시지를 어플리케이션으로 잘 보내줍니다.
:
: 그런데 이 작업을 Win7(64bit)에서 하면.. 문제가 있습니다.
:
: 장비로 보내는 메시지는 정상적으로 가고, 그에 따라 장비가 반응하여 해당 작업을 수행하는데, 그런데 작업 수행하고 나서 어플리케이션으로 보내주는 작업 완료 여부 패킷이 잘못되서 들어옵니다.
: TCP/IP에서 장비로부터 수신된 패킷을 분석해보면 값이 다르게 나옵니다. 그 전 작업 완료 여부 메시지가 나옵니다.
:
:
: 예를 들어 설명하면...
: 1. 장비 하드웨어 설정 Clear
: 2. 장비 하드웨어 설정
: 3. 데이터 취득..
:
: 이런 과정으로 할 경우....
:
: 1->2 까진 정상적으로 되는데 2->3번으로 갈때 보면 3번 작업이 장비 내부에선 수행되고, 2번작업에 해당하는 작업 완료 여부 패킷이 들어옵니다. 이상태에서 3번을 다시 수행하면.. 이제 3번 작업이 장비 내부에서 수행되고, 3번 작업에 해당하는 작업 완려 여부 패킷이 들어옵니다.
:
: 여기서 다시 2번을 하게 되면 2번 작업이 장비 내부에서 수행되고, 3번 작업에 해당하는 작업 완료 패킷이 들어옵니다..;;;
:
: 1, 2, 3번 작업이 장비 내부에선 메시지 받은 순간 잘 수행이 잘 되는데, 어느 순간부터 작업 완료 여부 패킷이 이전 작업 완료 패킷으로 밀려서 들어옵니다.
:
:
: TCP/IP 처리하는 소스는 문제가 없는거 같구요..
:
: 단지 운영체제에 따라 위 증상이 나옵니다.
:
: Win7(64bit)에서 TCP/IP 통신을 이용하여 장비 제어할 경우 먼가 다른 처리가 있어야 하나요?
:
: 장비 펌웨어 문제일까요? 사용 운영체제 문제일까요?
:
:
: 답변 부탁드립니다.
|