我正在尋找幾個小時以獲得有關我的問題的答案,但沒有發現任何內容。也許我在這裏得到一些幫助。從Java客戶端接收數據(數據包含int,簡寫,字符串)
我在做什麼: Java客戶端發送消息到C-Server。該消息包含不同類型,如整數,短和字符串(例如message = int:total_msg_length; short:operation; string:hello - > total_msg-length = 4(整數大小),operation = 2 ,你好= 5(每個字母是1字節= 5)。
所以,我怎樣才能在我的服務器接收消息?下面的代碼接收一個Integer(工作正常)下一步將接收一個簡短的然後用一個字符串(在US-ASCII轉換)
int *msg;
int recv_size;
int final_msg;
if((recv_size = recv(client_socket, &msg, sizeof(msg), 0)) < 0){
error_exit("Fehler bei recv(message_len)");
}
final_msg = endian_swap(msg);
printf("Message: %d\n", final_msg);
return final_msg;
有林感謝每個幫助請原諒使用一個字節數組,而不是字符緩衝區的方式我的英語不好,我來自德國。?: - )
注意:您傳遞的''代替的sizeof(int)的''的sizeof(MSG)。你的代碼工作原因是因爲在大多數平臺上兩種尺寸都是相同的,但這是不正確的。你想要接收一個int,而不是一個int指針。通常,指針的大小與指向值的大小不同。 – Claudix
仔細閱讀'recv()'/'send()'的手冊頁,並瞭解到至少對於套接字來說,這兩個函數不一定會接收/發送儘可能多的字節,而是很少。因此,圍繞此類呼叫進行計數,直到收到/發送所有數據都是一個好主意,而不是說必不可少。 – alk