문제

나는 사용 중입니다 TCP/IP 소켓 프로그래밍. 나는있다 부동 소수점 값 변수에 저장됩니다 ret_val 내 서버 코드에서 클라이언트를 받기를 기다리는 클라이언트에게 보내려고합니다.

어떻게하니?

도움이 되었습니까?

해결책

클라이언트와 서버가 모두 동일한 플랫폼 등이라는 것을 알고 있다면 간단히 사용할 수 있습니다. sizeof(float) 버퍼 크기를 결정하고 플로트 주소에서 많은 바이트를 복사합니다.

float number = 123.45;
send(sockfd, &number, sizeof(float),0);

클라이언트/서버가 다른 플랫폼/다른 언어 등이 되 자마자 플로트를 포괄적으로 인코딩하는 방법에 대해 걱정해야합니다. 그러나 간단한 접근 방식을 위해서는 위의 것이 잘 작동합니다.

다른 팁

float f = ...;
size_t float_size = sizeof(float);
const char* buffer = (const char *) &f;
send(mySocket, buffer, float_size, 0);

서버와 클라이언트 모두 동일한 플랫폼을 사용하는 경우이 코드는 제대로 작동합니다. 플랫폼이 다르면 메시지 크기와 Endianess를 명시 적으로 협상해야합니다.

텍스트 표현을 사용하십니까?

char buf[32] ; 
snprintf(buf,sizeof buf,"%f",ret_val); 
write(fd,buf,strlen(buf));

그 문자열을 읽고 sscanf로 다시 구문 분석 할 수 있습니다. (아마도 라인이 종료 될 수도 있습니다 - "%f n" - 숫자가 끝나는시기를 알게 될 것입니다.)

직접적인 접근 방식은 간단한 것입니다

write(fd,&ret_val,sizeof ret_val);

두 경우 모두 오류가 발생하면 쓰기의 반환 값을 확인하고 적절한 조치를 취하거나 Write ()가 말한 것보다 적은 바이트를 작성해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top