- 클라이언트 쪽에서는 항상 전체 응답을 받거나 한 가지 정렬에서는 응답의 절반을 받고 다른 정렬에서는 나머지 절반을 얻을 기회가 있습니다 (예 : recv() API에 대해 정의 됨).
- recv() API에서 채워진 두 가지 응답을받을 가능성이 있습니까?
0
A
답변
1
요청한 크기까지 모든 데이터를 얻을 수 있습니다. 실제로 수신 한 데이터의 양을 보려면 반환 값을 항상 확인하십시오.
귀하의 질문에 답하십시오 : 완전한 "응답"보다 적게받을 수도 있고 완전한 "응답"이상을 얻을 수도 있습니다. 하나 이상의 완전한 응답 메시지를 받으면 두 개 또는 한 개 반 또는 두 개 이상을 얻을 수 있습니다.
3
TCP는 메시지 경계를 보존하지 않습니다. 노출되는 것은 모두 바이트 스트림입니다. 따라서 한 쪽에서 호출하는 send()는 다른 쪽의 recv()와 일치하지 않을 수 있습니다. 예를 들어, 다음과 같은 일이 일어날 수 있습니다
- 전화가 다시 100 바이트) (통화 전송, 100 바이트()로 보내
- B는 (RECV를 호출) 및 도착 200 바이트 (Nagle's algorithm 참조) 반대로
또는 :
- 호출() 1 MiB 크기
- B는 RECV()를 호출로, 512 킬로바이트 가져, 다음 RECV (호출)을 다시 가져옵니다 보내 512 KiB (버퍼 공간은 수신기 또는 송신 측에서 불충분했습니다). 당신의 "패딩"질문에 대해서는
하지 당신이 RECV의 반환 값을 확인이 것을() 실제로 버퍼에 얼마나 많은 바이트를 반환 위치를 확인할 수 있습니다. [6 바이트 : 데이터 사이즈 헤더]
0
이 방법을 보낼 전달 된 데이터 블록을 형성 할 수있다 [데이터]
이어서 각 반복에서 1 바이트 판독 루프 RECV()를 호출한다. '데이터 크기 헤더'(처음 6 바이트)를 읽고 원하는 크기의 버퍼를 할당 한 다음 나머지 바이트를 읽습니다.
관련 문제
- 1. Shopify api에서 자동 이메일 응답
- 2. RESTful API에서 페이지 매김 응답 페이로드
- 3. facebook api에서 응답 후 피드를 다시로드 하시겠습니까?
- 4. Google지도 API에서 결과를 저장하는 방법에 응답 하시겠습니까?
- 5. 트위터 스트리밍 API에서 손잡이 pycurl 응답
- 6. facebook api에서 정의되지 않은 응답 데이터가 있습니까?
- 7. Experian의 API에서 TTY 및/또는 ARF 응답
- 8. RECV() 파이썬
- 9. .NET과 동등한 recv?
- 10. 소켓 보내기 recv 함수
- 11. epoll recv 반환 값
- 12. RECV 동적 메모리 할당
- 13. 이상한 윈속 RECV() 둔화
- 14. Recv()에 대한 혼란이
- 15. recv()가 블로킹하지 않습니다.
- 16. MSG_READALL은 recv()로 ??()
- 17. recv 서버에서 들어오는 트래픽
- 18. 다른 스레드의 Winsock recv
- 19. EAGAIN on recv()
- 20. "채우기"채우기
- 21. getJSON이이 API에서 XML을 리턴합니다.
- 22. 자바 클라이언트에서 파이썬 소켓 recv
- 23. 잘못된 데이터를 반환하는 Winsock recv()
- 24. recv 메시지 및 파일에 쓰기
- 25. MPI 비 차단 전송/RECV
- 26. 느린 recv 호출에 대한 이유
- 27. recv socket api의 내부 작업
- 28. winsock recv() 및 accept() 문제
- 29. 부분적으로 recv 용 버퍼 할당
- 30. winsock - recv - 네트워크 연결 문제