2009-07-31 131 views
2

我正在使用TCP/IP套接字編程。我有一個浮點值存儲在一個變量ret_val在我的服務器代碼,我想發送到正在等待接收它的客戶端。從服務器發送浮點數到客戶端

我該怎麼辦?

+2

如果指定發送者和接收者正在使用的語言和/或運行時,可能會有所幫助。 – 2009-07-31 11:52:23

回答

5

如果您知道客戶端和服務器都是相同的平臺等,您可以簡單地使用sizeof(float)來確定您的緩衝區大小並從您的浮點地址複製那麼多字節。

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

只要您的客戶機/服務器是不同的平臺/不同語言等你將不得不開始擔心如何可移植編碼浮動。但是對於一個簡單的方法,上面的方法可以正常工作。

+0

感謝Brian,它的工作很好。 – 2009-07-31 12:16:04

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

如果服務器和客戶端都使用相同的平臺,此代碼將正常工作。如果平臺不同,則必須明確協商消息大小和字節順序。

3

使用文本表示法?

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()寫入的字節數少於您告訴的字節數。

相關問題