2010-11-17 57 views
1

我正在編寫我的第一個套接字行,並完成了一個客戶機服務器系統之間的消息傳遞。接下來的步驟是製作一個標頭,讓接收者知道消息的數據量以及消息的數據量。我怎樣才能做到這一點?套接字編程中的頭文件

我想報頭包含兩個int:

int to_phone_number; 
int size; 

如何被髮送頭?

send(sock, the_message, max_message_length, 0); 
+4

作爲參考,「int」不能保證足夠大以表示電話號碼(事實上通常不是,除非您假定電話號碼永遠不會超過9位數字,而'int' s有32位)。 – cHao 2010-11-17 20:49:31

回答

3

標題,正文,它仍然是數據。

您將以與發送任何內容相同的方式發送您的標題。

你可能想要一個struct message_header來組成你的標題。

struct message_header { 
    int to_phone_number; 
    int size; 
}; 

創建一個struct message_header變量,設置其字段,然後發送它。

struct message_header header; 
// ... 
send(sock, &header, sizeof(header), 0); 
+0

謝謝!!!!!!!!! – user265767 2010-11-17 21:15:45

+2

不同系統之間的字節順序(字節順序)可能不同,應該考慮這一點。傳統上,二進制整數值以大端順序發送,所以16位數字「265」將以(十六進制)「01 00」而不是「00 01」發送。 x86是小端。 標頭具有切換到網絡字節排序和從網絡字節排序開始工作的功能,無論系統如何,它都能正常工作。另外'sizeof(int)'因系統而異。您可以包含並使用'int32_t'來確定大小。 – nategoose 2010-11-17 21:33:52