我向网络模拟器发送带有一个字段(无符号整数)的结构,并输出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