나는 Erlang에서 gen_tcp를 사용하여 소켓을 통해 전송 된 데이터를 단일 스트림으로 집계 할 수 있다는 것을 읽었습니다. 소켓이 정확하게 특정 바이트 수를 전송하도록하려면 어떻게해야합니까?소켓을 통해 정확한 바이트 수를 보냅니다.
0
A
답변
5
TCP는 패킷 지향적 인 UDP와는 달리 스트림 프로토콜입니다. 수신 응용 프로그램이 사용 가능한 데이터가 클라이언트의 하나 또는 여러 개의 호출에서 온 것인지 여부를 알 수 없음을 의미합니다.
TCP 패킷에서 전송되는 바이트 수를 실제로 제어 할 수 없으면 여러 개의 send()
호출로 인해 하나의 TCP 패킷이 수신 될 수 있으며 하나의 send()
호출로 인해 여러 개의 TCP 패킷이 전송 될 수 있습니다. 이것은 OS TCP 스택에 의해 제어됩니다.
Erlang에서는 소켓 옵션 {packet, 1|2|4}
~ gen_tcp:connect
및 gen_tcp:listen
을 사용하여 TCP 데이터의 패킷 지향 처리를 만들 수 있습니다. 이렇게하면 각 send()
에 1,2 바이트의 접두사가 삽입되고 수신 측에서는 (또한 erlang이고 동일한 {packet, N}
옵션을 사용함) 메시지가 조각난 방법에 관계없이 보낸 바이트 수가 수신 될 때까지 데이터를 읽습니다 TCP 패킷으로 변환합니다.
gen_tcp:recv
을 호출하면 예상 된 바이트 수를 읽을 때까지 차단됩니다. 그리고 액티브 모드 소켓에서도 메시지는 예상 된 바이트 수와 함께 전송됩니다.
관련 문제
- 1. 소켓을 통해 바이트 배열 수신
- 2. 소켓을 통해 다중 바이트 배열을 전송하는 중
- 3. 안드로이드 - TCP 소켓을 통해 바이트 [] 보내기/받기
- 4. 자바 - 소켓을 통해 바이트 객체 보내기
- 5. 소켓을 통해 구조체를 전송합니다.
- 6. C++ - 헤더가있는 패킷을 만들어 UDP 소켓을 통해 보냅니다.
- 7. HTTP 응답 -> 정확한 바이트 수를 얻은 다음 연결을 닫습니다.
- 8. write()는 클라이언트 종료에도 불구하고 정확한 바이트 수를 반환합니다.
- 9. 멀티 바이트 문자의 정확한 수를 얻는 방법은 무엇입니까?
- 10. 스트림 (tcp) 소켓에서 정확한 바이트 수를 읽는 방법은 무엇입니까?
- 11. Java/Android : 소켓을 통해 바이트 배열 읽기/쓰기
- 12. android 응용 프로그램은 소켓을 통해 작은 cmds를 보냅니다.
- 13. 루비 소켓을 통해 클라이언트 측에 16 진수 값을 보냅니다.
- 14. 정확한 문자 수를 찾으십시오.
- 15. 헤드폰 케이블을 통해 신호를 보냅니다.
- 16. 자바에서 소켓을 통해 정수 또는 바이트 배열을 전송하는 방법
- 17. C에서 소켓을 통해 256 바이트 이상을 읽는 방법
- 18. 객체를 바이트 배열로 변환 (소켓을 통해 전송). 다시 그것을 변환
- 19. 바이트 또는 Int? 어느 소켓을 통해 보내는 것이 더 빠릅니까?
- 20. raw_input을 통해 read() 할 바이트 수를 전달하려고 시도합니다.
- 21. 바이트 수를 얻는 방법
- 22. 소켓을 통해 파일 보내기
- 23. 정확한 행 수를 반환하는 쿼리
- 24. 문자열에서 특정 바이트 수를 생성하십시오.
- 25. 텔넷을 통해 키를 보냅니다.
- 26. C# 소켓을 통해 얼마나 많은 데이터가 전송되었는지 측정하려면 어떻게합니까?
- 27. 프록시를 통해 소켓을 생성하십시오.
- 28. 소켓을 통해 객체 보내기
- 29. Socket의 SendBuffer에서 바이트 수를 얻는 방법은 무엇입니까?
- 30. 조각화 이미지 소켓을 통한 바이트 배열
해결하려는 문제가 명확하지 않습니다. 보낸 바이트 수는 항상 사용자가 지정한 수입니다. 당신이 보내달라고 요청하지 않은 바이트를 보내거나 보내달라고 요청한 바이트를 보내지 않습니다. –
내가 잘못되었거나 실제로 또는 다른 보내기 작업을 단일 청크에서 집계 할 수 있습니까? {no_delay, false}는 표준 동작이어야합니다. – user601836
"단일 덩어리"란 무엇을 의미합니까? 단일 TCP 읽기 작업에서 얻는 데이터의 양을 의미하는 경우 임의적입니다. 이것은 TCP의 기본 속성이며 이에 대해 할 수있는 일이 없습니다. –