我向網絡模擬器發送帶有一個字段(無符號整數)的結構,並輸出unsigned int,但它不正確。使用UDP發送後,無符號整數顯示爲隨機負整數
如果我不重新運行網絡模擬器,如果我重新發送具有相同編號的結構,它將是相同的隨機整數。如果我發送+1號碼,我得到隨機整數-1。
如果我重新運行網絡模擬器並重新發送具有相同編號的結構,它將顯示一個不同的隨機整數。
這是stuct:
struct pkt_INIT {
unsigned int router_id;
};
這是發送結構代碼:
int sock;
struct sockaddr_in server_addr;
struct hostent *host;
char send_data[1024];
host= (struct hostent *) gethostbyname(emulator_host);
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("socket");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(emulator_port);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(server_addr.sin_zero),8);
struct pkt_INIT init;
init.router_id = router_id;
strcpy(send_data,(char *)&init);
sendto(sock, send_data, strlen(send_data), 0,
(struct sockaddr *)&server_addr, sizeof(struct sockaddr));
我沒有任何的網絡仿真器的代碼。
你的標題似乎暗示着你打印一個unsigned int和得到一個負數,這是不可能的。 – 2012-03-29 23:38:09
是的 - 我不知道網絡模擬器的代碼,但它應該打印結構的無符號整數字段,它打印負數(當我在Java中完成時,它打印正確的值)。 – user1136342 2012-03-29 23:40:33
嘗試在發送之前通過'htonl'運行它?也許它應該是網絡字節順序(big-endian)。 – 2012-03-29 23:54:34