2
我正在編程一個服務器端客戶端程序。 在服務器上我通過這個數據結構的陣列管理客戶端:如何memcpy()結構sockaddr_in
struct Client
{
struct sockaddr_in addr;
/*...*/
};
struct Client CLIENTS[MAX_CLI];
當我收到來自客戶端的第一個數據包通過我UDP
插座
struct sockaddr_in addr_cli;
memset(&addr_cli,0,sizeof(struct sockaddr_in));
b=recvfrom(SOCK_UDP_FATHER, &pdu, sizeof(pdu), MSG_DONTWAIT,
(struct sockaddr *)&addr_cli, (socklen_t *)&laddr_cli);
我想他的地址複製到我的結構。所以我這樣做:
memcpy(&CLIENTS[client].addr,(struct sockaddr*)&addr_cli,
sizeof(struct sockaddr_in));
printf("IP client: %s",inet_ntoa(CLIENTS[client].addr.sin_addr);
奇怪的是,通信的第一次嘗試失敗,打印0.0.0.0
。但接下來的嘗試,客戶端,是成功的,一切都很好。爲什麼會發生?
告訴你的代碼看起來不錯,所以原因必須是在其他地方。 – alk 2015-04-01 19:13:11
然而,不需要cast'(struct sockaddr *)'。 – alk 2015-04-01 19:14:08
顯示'addr_cli'的聲明。 – 2015-04-01 19:14:09