C에서 간단한 서버 클라이언트 프로그램을 만들려고합니다. 클라이언트에서 서버에서 메시지를 수신하려고 시도하지만, 메시지의 크기는 미리 결정되지 않습니다. 따라서 들어오는 바이트 수를 확인하고 적절한 크기 인 malloc
을 확인하고 싶습니다.ioctl(), read() 및 malloc()을 사용하여 서버가 제대로 작동하지 않는 경우 메시지 수신
나는 ioctl
을 사용하려고했지만, 너무 늦은 정보를 얻는 것처럼 보입니다. 이것은 내가 가지고있는 것입니다.
char *message_from_server;
int length;
while(1){
ioctl(socket, FIONREAD, &length);
message_from_server = malloc(length);
read(socket, message_from_server, length);
}
I 처음 사용할 때, length
이 0 번째 시간 길이는 첫 번째 메시지의 것과 동일하다. 내가 읽은 후에 라인 ioctl(socket, FIONREAD, &length);
을 넣으면, 정확한 공간을 mallocing하는 데 어려움을 겪을 수 있습니다. 이 문제가 내 문제를 해결하는 유효한 방법일까요?
나는 내 문제를 해결하기 위해 realloc
을 사용할 수 있다고 들었지만, 어떻게 내 문제를 해결할 수 있는지 보려고 고심 중이다. 그게 더 좋은 방법이라면, 나는 어떤 조언도 기뻐할 것입니다.
감사합니다.
TCP 만 있으면 수신 데이터의 크기가 미리 결정됩니다. 1 바이트 이상이 될 것입니다. ioctl을 사용하여 "peeking"하여 하나 이상의 바이트로 응용 프로그램 메시지를 구현하려는 경우 또는 read()가 항상 1 바이트보다 긴 완전한 메시지로 버퍼를로드한다고 가정하면 곧 문제가 발생할 것입니다. –