[완료]소켓프로그래밍에서 read()의 반환값과 저장된 데이터의 양이 다릅니다.
글쓴이: rudian / 작성시간: 목, 2014/12/18 - 10:04오전
클라이언트에서는 5바이트씩 전송하여 4+1('\0')을 지속적으로 보냅니다.
서버에서는 buffer_size(256)만큼 read()하게 되는데, 여기서 버퍼에 받아오는 크기와 read의 반환값이 다릅니다.
null을 제외하고 strlen을 했을때 4가 나오며, read의 반환값은 5가 나와야하지 않나요?
고정적 오류가 아니라 간헐적으로 나타나는 현상이긴 합니다만, strlen은 4를 나타내고 read는 여러번의 전송(5+5+..)을 한번에 인식해버립니다.
어떤 문제인지, 어떻게 해결해야할지 알 수 있을까요?
Forums:
버퍼에 메시지가 2개 이상 들어간
버퍼에 메시지가 2개 이상 들어간 경우네요.
read가 10이상이면
strlen이 null까지만 세기 때문에 뒤쪽에 데이터는 없다고 판단하는 겁니다.
포인터를 5씩 이동해서 처리하거나, 5byte씩 memcpy를 통해 처리해야 합니다.
아.. 중간에 null이 추가되서 그부분을 처리해
아.. 중간에 null이 추가되서 그부분을 처리해 줘야 하는군요.
답변 감사합니다!
댓글 달기