C/C++ 소켓 프로그래밍 및 "read (socket, buffer, BUFSIZE)"메서드 사용. 정확하게 "버퍼"는 char와 byte가 같은 것을 알지만 바이트 배열에 얼마나 많은 요소가 들어 있느냐가 중요합니다. 버퍼가 null 문자까지 전체 메시지를 보유 할 수 있어야합니까?C에서 소켓 데이터를 읽는 버퍼를 만드는 방법
답변
BUFSIZE는 버퍼의 크기 (바이트)와 같아야합니다. read()는 버퍼가 꽉 찼을 때 읽기를 멈 춥니 다. 다음은 예입니다
#define MY_BUFFER_SIZE 1024
char mybuffer[MY_BUFFER_SIZE];
int nBytes = read(sck, mybuffer, MY_BUFFER_SIZE);
감사합니다. 내가 뭘 추측하는지 스트림을 읽을 버퍼가 버퍼보다 큰 경우 어떻게됩니까? –
Heat Miser : read()가 0을 반환 할 때까지 계속 읽습니다. –
죄송합니다. 나는 당신이 당신의 독서를 반복해야한다는 것을 의미했다. 루프를 통과 할 때마다 (심지어 내용을 문자열에 추가하는 경우에도) 버퍼에있는 내용을 처리합니다. read()가 0을 반환하면 루프가 완료됩니다. –
귀하의 소켓 구현이 확실히 전체 메시지를 개최, 충분한 크기로, 버퍼를 필요로하지 않지만, 당신은 무엇을하고 있는지에 따라 편리 할 수 있습니다.
항상 기회가있을 때 sizeof
을 사용하십시오. 기본 제공 연산자 sizeof
을 사용하면 컴파일러에게 직접 변수를 지정하는 대신 변수의 크기를 계산하도록 요청합니다. 이렇게하면 실제 변수의 크기가 생각한 것과 다른 경우 버그가 발생할 위험이 줄어 듭니다.
그래서, 대신 일을
#define BUFSIZE 1500
char buffer[BUFSIZE];
int n = read(sock, buffer, BUFSIZE);
정말 인수가 유형의 이름이 아닌 당신이를 sizeof을 인수 주위에 괄호를 필요로하지 않는 방법
char buffer[1500];
int n = read(sock, buffer, sizeof buffer);
공지 사항을 사용해야합니다 .
unwind : C에서 true 또는 C++에서만 true입니까? (미안하지만, 익숙한 승/C). – benc
안녕하세요, 아주 오래된 질문으로 귀찮게해서 죄송합니다. 나는 비슷한 문제에 직면하고 있으며, 당신이 내게 그것을 일으킬 수있는 것에 대해 의견을 제시 할 수 있다면 정말 행복 할 것입니다. 사전에! 희망하지 않아도됩니다. 경우에, 이것은 [질문] (http://stackoverflow.com/questions/12070203/image-stream-sent-over-socket-server-issue)입니다! – Matteo
- 1. 자바에서 드로잉 버퍼를 만드는 방법
- 2. 이전 데이터를 읽는 C++ boost asio tcp 소켓
- 3. C에서 텍스트 행을 읽는 방법
- 4. URL 데이터를 읽는 방법
- 5. plist 데이터를 읽는 방법
- 6. ReadFile FILE_FLAG_NO_BUFFERING 두 섹터간에 데이터를 읽는 방법
- 7. C에서 데이터를 직렬화하는 방법
- 8. AudioQueueBufferRef에서 데이터를 읽는 방법 -> mAudioData
- 9. 안드로이드에서 소켓 입력 스트림을 읽는 방법
- 10. XML 파일에서 데이터를 읽는 방법
- 11. 데이터베이스 이름없이 데이터를 읽는 방법
- 12. VHDL에서 rom_type의 데이터를 읽는 방법?
- 13. NHibernate : ISet에서 데이터를 읽는 방법
- 14. 파일에서 데이터를 저장하고 읽는 방법
- 15. UDP 소켓 (VB.Net) 수신을위한 버퍼를 동적으로 할당하는 방법
- 16. C에서 Open Excel 파일을 읽는 방법
- 17. C에서 텍스트 파일의 여러 줄을 읽는 방법 #?
- 18. C에서 사용자 지정 파일 속성을 읽는 방법 #
- 19. getrusage를 사용하여 C에서 페이지 오류를 읽는 방법?
- 20. C에서 Tesseract를 사용하여 다른 언어를 읽는 방법 #
- 21. C에서 FASTA 파일을 읽는 가장 좋은 방법 #
- 22. C에서 스트리밍 데이터를 그래프하는 방법
- 23. PHP : 연결 : 소켓 데이터를 읽는 중 연결 문제가 발생했습니다.
- 24. Flex를 사용하여 서버에서 XML 데이터를 읽는 방법?
- 25. C에서 다중 스레드를 만드는 방법 #
- 26. C에서 나무 구조를 만드는 방법
- 27. 객관적인 C에서 MDIForms 만드는 방법?
- 28. C에서 삼각형 버튼을 만드는 방법 #
- 29. C에서 개체의 인스턴스를 만드는 방법 #
- 30. 텍스트 파일에서 데이터를 지속적으로 효율적으로 읽는 방법
이 null 문자는 사용자의 송신자가 보낸 것입니까? –
아니요, 안타깝게도 예상 된 페이로드 끝에 메시지를 추가해야합니다. –
메시지의 크기를 알고 계시거나 어떻게 표시 했습니까? –