두 개의 응용 프로그램 인 콘솔 서버와 창 클라이언트로 구성된 2D 멀티 플레이어 게임을 작성 중입니다. 지금까지 클라이언트는 연결된 클라이언트로 채워지는 FD_SET, 내 게임 객체 포인터 목록 및 다른 것들을 가지고 있습니다. main()에서는 소켓에서 수신 대기를 초기화하고 들어오는 연결을 수락하고 FD_SET 내에 배치하는 세 개의 스레드를 만듭니다. 하나는 객체의 위치, 속도 및 가속을 처리하고 (필요한 경우) 필요한 것으로 플래그 지정하는 것입니다. 클라이언트에서 업데이트해야합니다. 세 번째 스레드는 send() 함수를 사용하여 모든 객체의 업데이트 정보를 전송합니다 (객체 포인터 목록을 반복). 이러한 패킷은 작업 코드, 패킷 크기 & 실제 데이터로 구성됩니다. 클라이언트에서, 올바르게 받아 들여지는 처음 5 바이트 (opcode와 패킷 크기)를 읽음으로써 그것을 파싱하지만, 패킷의 나머지 부분을 읽을 때 (이제는 그 크기를 알기 때문에), 나는 WSAECONNABORTED (오류 코드 10053). 이 오류에 대해 읽었지만 응용 프로그램에서 왜 발생하는지 알 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.recv를 두 번째로 사용할 때 WSAECONNABORTED
2
A
답변
0
오류는 시스템이 소켓을 닫았 음을 의미합니다. 이는 클라이언트의 연결이 끊어 졌음을 감지했거나 읽는 것보다 많은 데이터를 전송했기 때문일 수 있습니다.
네트워크 프로토콜 용 구문 분석기는 일반적으로 견고성을 높이기 위해 많은 작업이 필요하며 단일 읽기()와 같이 얼마나 많은 데이터를 가져올 지 알 수 없습니다. 당신은 당신이 읽은 첫번째 청크에서 당신의 운영 코드와 패킷 크기보다 더 많은 것을 얻을 수 있습니다, 당신은 심지어 더 작을지도 모릅니다 (예를 들면 운영 코드 만). 당신의 실패 사례에서 이것이 일어나지 않는다는 것을 다시 한번 확인하십시오.
관련 문제
- 1. HttpServletResponse를 두 번째로 호출하십시오.
- 2. 두 번째로 앞쪽에있는 앱?
- 3. 두 번째로 고집하는 UISlider
- 4. uiwebview가 두 번째로 index.html을로드하지 않습니다.
- 5. 추가 두 번째로 마지막 요소
- 6. 빈 MFMailComposeViewController 두 번째로 표시됩니까?
- 7. 두 번째로 세션을 시작 하시겠습니까?
- 8. 내비게이션 컨트롤러가 두 번째로 중단됨
- 9. 두 번째 창 원인을 두 번째로 생성 한 생성 두 번째로 작성된
- 10. MPMoviePlayerController의 initialPlaybackTime을 두 번째로 다시 만들 때 initialPlaybackTime을 설정하지 못했습니다.
- 11. 두 번째로 양식을로드 할 때 양식 데이터 보관
- 12. 메뉴를 두 번째로 클릭하면 페이지가 표시되지 않습니다.
- 13. CodeIgniter의 액티브 레코드가 두 번째로 증가하는 것
- 14. ASP.NET 조각 캐시 - 컨트롤이 두 번째로 둥글다.
- 15. Java : 직렬화가 두 번째로 작동하지 않습니다.
- 16. 루비 TCPSocket의 recv를 차단 결코
- 17. 두 번째로 DataBinding이 작동하지 않는 이유는 무엇입니까?
- 18. Android AudioRecord - 두 번째로 초기화하지 않습니다.
- 19. Windows에서 두 번째로 사용하면 libxml2 충돌이 발생합니다.
- 20. 두 번째로 구분 된 데이터 구조를 파싱합니다.
- 21. 두 번째로 내가 LINQ에 새로운 해요 LINQ
- 22. Jquery Onclick이 두 번째로 발생하지 않습니다.
- 23. 왜 C# 컴파일러가 두 번째로 시작됩니까?
- 24. 두 번째로 클릭 한 요소를 숨기는 방법
- 25. iOS MKMapViewDelegate - 두 번째로 UserLocation 가져 오기
- 26. 서브 액티브를 두 번째로 시작하면 java.lang.OutOfMemoryError가 발생합니다.
- 27. Java SingleFrameApplication을 두 번째로 표시하는 것
- 28. KeyDown 이벤트가 두 번째로 실행되지 않습니다.
- 29. AVPlayerLayers가있는 다중 AVPlayers가 두 번째로 사라집니다. viewcontroller
- 30. 두 번째로 열면 jQuery 대화 상자가 축소됩니다.
첫 번째 recv()가 정확히 5 바이트를 가져 왔는지 확인했습니다. 첫 번째 recv() 항상 예상대로 작동하지만 두 번째 recv() 항상 10053 오류와 함께 실패합니다. 처음에는 서버가 짧은 시간에 많은 패킷을 펌핑했지만 recv() 함수가 실패하지 않았는지 확인하기 위해 10 초당 하나의 패킷 만 보내도록 변경했습니다. 따라서 문제를 일으킨다. –