سؤال

انا استخدم تكب / إب برمجة المقبس.انا املك قيمة النقطة العائمة المخزنة في متغير 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);

سيعمل هذا الرمز بشكل جيد إذا كان الخادم والعميل يستخدمان نفس النظام الأساسي.إذا كانت الأنظمة الأساسية مختلفة، فسيتعين عليك التفاوض على أحجام الرسائل ونطاقها بشكل صريح.

استخدام التمثيل النصي؟

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

يمكنك قراءة هذه السلسلة وتحليلها مرة أخرى باستخدام sscanf.(وربما يتم إنهاء السطر - "%f " - حتى تعرف متى ينتهي الرقم.)

النهج المباشر هو ببساطة

write(fd,&ret_val,sizeof ret_val);

في كلتا الحالتين، يجب عليك التحقق من القيمة المرجعة للكتابة واتخاذ الإجراء المناسب في حالة حدوث خطأ، أو كتابة write() بايتات أقل مما طلبته.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top